Python 计算熊猫15分钟数据的日差
我有一个巨大的开盘和收盘价格数据框,每天每15分钟记录一次。这一天从9:45开始,到16:15结束。我当前的df如下所示: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
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转换为日期的时间,最后: