Pandas使用DateTime从值7天中减去值。shift不是答案

2024-04-27 19:32:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我对编程和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

如您所见,有一个名为columnDateTime和一个名为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]

Tags: falsetruefordatetimeindexiflocdelta