Python 计算熊猫15分钟数据的日差

Python 计算熊猫15分钟数据的日差,python,python-3.x,pandas,Python,Python 3.x,Pandas,我有一个巨大的开盘和收盘价格数据框,每天每15分钟记录一次。这一天从9:45开始,到16:15结束。我当前的df如下所示: open_p close_p date 2013-12-20 09:45:00 -1.14 -1.12 2013-12-20 10:00:00 -1.12 -1.12 2013-12-20 10:15:00 -1.12 -1.11 20

我有一个巨大的开盘和收盘价格数据框,每天每15分钟记录一次。这一天从9:45开始,到16:15结束。我当前的df如下所示:

                      open_p  close_p
date                                
2013-12-20 09:45:00   -1.14    -1.12
2013-12-20 10:00:00   -1.12    -1.12
2013-12-20 10:15:00   -1.12    -1.11
2013-12-20 10:30:00   -1.11    -1.10
...
2013-12-20 15:30:00   -1.13    -1.14
2013-12-20 15:45:00   -1.14    -1.14
2013-12-20 16:00:00   -1.13    -1.06
2013-12-20 16:15:00   -1.05    -1.01
2013-12-23 09:45:00   -1.02    -1.02
2013-12-23 10:00:00   -1.02    -1.02
2013-12-23 10:15:00   -1.03    -1.07
2013-12-23 10:30:00   -1.06    -1.08
....
2013-12-23 15:30:00   -1.11    -1.14
2013-12-23 15:45:00   -1.13    -1.12
2013-12-23 16:00:00   -1.12    -1.09
2013-12-23 16:15:00   -1.09    -1.13
...
                      open_p  close_p  daily_change
date                                
2013-12-20 09:45:00   -1.14    -1.12     0.13
2013-12-20 10:00:00   -1.12    -1.12     0.13
2013-12-20 10:15:00   -1.12    -1.11     0.13
2013-12-20 10:30:00   -1.11    -1.10     0.13
...
2013-12-20 15:30:00   -1.13    -1.14     0.13
2013-12-20 15:45:00   -1.14    -1.14     0.13
2013-12-20 16:00:00   -1.13    -1.06     0.13
2013-12-20 16:15:00   -1.05    -1.01     0.13
2013-12-23 09:45:00   -1.02    -1.02    -0,11
2013-12-23 10:00:00   -1.02    -1.02    -0,11
2013-12-23 10:15:00   -1.03    -1.07    -0,11
2013-12-23 10:30:00   -1.06    -1.08    -0,11
....
2013-12-23 15:30:00   -1.11    -1.14    -0,11
2013-12-23 15:45:00   -1.13    -1.12    -0,11
2013-12-23 16:00:00   -1.12    -1.09    -0,11
2013-12-23 16:15:00   -1.09    -1.13    -0,11
我想计算每天16:15关门和9:45开门之间的差异。例如,2013-12-20的日变化列等于-1.01-(-1.14)。结果应该如下所示:

                      open_p  close_p
date                                
2013-12-20 09:45:00   -1.14    -1.12
2013-12-20 10:00:00   -1.12    -1.12
2013-12-20 10:15:00   -1.12    -1.11
2013-12-20 10:30:00   -1.11    -1.10
...
2013-12-20 15:30:00   -1.13    -1.14
2013-12-20 15:45:00   -1.14    -1.14
2013-12-20 16:00:00   -1.13    -1.06
2013-12-20 16:15:00   -1.05    -1.01
2013-12-23 09:45:00   -1.02    -1.02
2013-12-23 10:00:00   -1.02    -1.02
2013-12-23 10:15:00   -1.03    -1.07
2013-12-23 10:30:00   -1.06    -1.08
....
2013-12-23 15:30:00   -1.11    -1.14
2013-12-23 15:45:00   -1.13    -1.12
2013-12-23 16:00:00   -1.12    -1.09
2013-12-23 16:15:00   -1.09    -1.13
...
                      open_p  close_p  daily_change
date                                
2013-12-20 09:45:00   -1.14    -1.12     0.13
2013-12-20 10:00:00   -1.12    -1.12     0.13
2013-12-20 10:15:00   -1.12    -1.11     0.13
2013-12-20 10:30:00   -1.11    -1.10     0.13
...
2013-12-20 15:30:00   -1.13    -1.14     0.13
2013-12-20 15:45:00   -1.14    -1.14     0.13
2013-12-20 16:00:00   -1.13    -1.06     0.13
2013-12-20 16:15:00   -1.05    -1.01     0.13
2013-12-23 09:45:00   -1.02    -1.02    -0,11
2013-12-23 10:00:00   -1.02    -1.02    -0,11
2013-12-23 10:15:00   -1.03    -1.07    -0,11
2013-12-23 10:30:00   -1.06    -1.08    -0,11
....
2013-12-23 15:30:00   -1.11    -1.14    -0,11
2013-12-23 15:45:00   -1.13    -1.12    -0,11
2013-12-23 16:00:00   -1.12    -1.09    -0,11
2013-12-23 16:15:00   -1.09    -1.13    -0,11

完成这项工作的最快和最方便的方法是什么?

您可以在日期上选择“groupby”,在第一个和最后一个日期上选择“agg”,然后找出差异:

print (df.groupby(pd.Grouper(freq="D"))
         .agg({"open_p":"first", "close_p":"last"})
         .diff(axis=1)["close_p"])

date
2013-12-20    0.13
2013-12-21     NaN
2013-12-22     NaN
2013-12-23   -0.11
Freq: D, Name: close_p, dtype: float64
与和值一起使用,并减去到新列:

g = df.groupby(pd.Grouper(freq='d'))
df['daily_change'] = g['close_p'].transform('last').sub(g['open_p'].transform('first'))
print (df)
                     open_p  close_p  daily_change
date                                              
2013-12-20 09:45:00   -1.14    -1.12          0.13
2013-12-20 10:00:00   -1.12    -1.12          0.13
2013-12-20 10:15:00   -1.12    -1.11          0.13
2013-12-20 10:30:00   -1.11    -1.10          0.13
2013-12-20 15:30:00   -1.13    -1.14          0.13
2013-12-20 15:45:00   -1.14    -1.14          0.13
2013-12-20 16:00:00   -1.13    -1.06          0.13
2013-12-20 16:15:00   -1.05    -1.01          0.13
2013-12-23 09:45:00   -1.02    -1.02         -0.11
2013-12-23 10:00:00   -1.02    -1.02         -0.11
2013-12-23 10:15:00   -1.03    -1.07         -0.11
2013-12-23 10:30:00   -1.06    -1.08         -0.11
2013-12-23 15:30:00   -1.11    -1.14         -0.11
2013-12-23 15:45:00   -1.13    -1.12         -0.11
2013-12-23 16:00:00   -1.12    -1.09         -0.11
2013-12-23 16:15:00   -1.09    -1.13         -0.11
另一个想法是使用,删除将DatetimeIndex转换为日期的时间,最后: