我对编程和Python非常陌生,我用for循环做了一些事情,我确信它可以被优化,我希望在这方面得到帮助
我有以下DF
称为t:
DateTime jf_ind jfm7_ind chron_gradient delta_power
0 2020-01-01 00:00:00 True False 16.503269 0
1 2020-01-01 01:00:00 True False 16.596134 0
2 2020-01-01 02:00:00 True False 16.870060 0
3 2020-01-01 03:00:00 True False 17.082875 0
4 2020-01-01 04:00:00 True False 17.777166 0
如您所见,有一个名为column
的DateTime
和一个名为delta_power的列,该列已初始化并充满0
我想做的是(从2020-01-07 00:00:00开始-index==168)if
这个索引的jf_ind的值是True
或者jfm7_ind的值是True
什么都不做
else
查找给出当前索引日期时间-7天的索引,然后从当前索引的时间梯度值中减去时间梯度值
一个简单的。转移到chron_gradient列将不起作用,因为我的数据不是所有的日子都有24小时。因为白天节省了23小时,一天有25小时,所以它不是100%准确
这是我使用的for循环,它是正确的。我只是想知道我是否可以矢量化,以及如何矢量化,因为这对我来说太难了
for i in range(168, len(t)):
if ((t["jf_ind"].loc[i] == 0 and t["jfm7_ind"].loc[i] == 0) == True):
d = t["DateTime"].loc[i]
dm7 = d - timedelta(days = 7)
if not t[t["DateTime"] == dm7].empty:
im7 = t[t["DateTime"] == dm7].index[0]
else :
dm7 = dm7 - timedelta(hours = 1)
im7 = t[t["DateTime"] == dm7].index[0]
t["delta_power"].loc[i] = t["chron_gradient"].loc[i] - t["chron_gradient"].loc[im7]
目前没有回答
相关问题 更多 >
编程相关推荐