Python 基于索引条件挤压/聚合行
我刚接触熊猫,几天来一直在为一个特殊的问题而挣扎。我有一个加密定价的数据集,时间间隔为1分钟,一直追溯到2012年() 看起来是这样的:Python 基于索引条件挤压/聚合行,python,pandas,dataframe,Python,Pandas,Dataframe,我刚接触熊猫,几天来一直在为一个特殊的问题而挣扎。我有一个加密定价的数据集,时间间隔为1分钟,一直追溯到2012年() 看起来是这样的: open close high low volume timestamp 1364774820 93.25 93.300000 93.30
open close high low volume
timestamp
1364774820 93.25 93.300000 93.30 93.25 93.300000
1364774880 100.00 100.000000 100.00 100.00 93.300000
1364774940 93.30 93.300000 93.30 93.30 33.676862
1364775060 93.35 93.470000 93.47 93.35 20.000000
1364775120 93.47 93.470000 93.47 93.47 2.021627
... ... ... ... ... ...
1615302420 54566.00 54584.000000 54585.00 54566.00 0.442658
1615302480 54586.00 54586.733478 54598.00 54586.00 2.802892
1615302540 54586.00 54513.000000 54587.00 54501.00 9.255249
1615302600 54511.00 54464.316913 54511.00 54456.00 12.339995
1615302660 54456.00 54456.000000 54460.00 54456.00 1.023890
[3244157 rows x 5 columns]
我要做的是从这些数据中推导出一个5分钟的时间间隔。这意味着我需要执行以下操作:
- 以300秒的间隔设置新数据帧的索引,从1364774700开始
ts = data.index[0] ts -= (ts % 300) te = data.index[-1] te -= (te % 300) t5min = [x for x in range(ts, te + 300, 300)] df = pd.DataFrame(index=t5min, columns=data.columns)
- 在新df中,以1分钟的间隔对300秒间隔内的所有体积数据求和
- 根据范围内的1分钟间隔数据点,调整新5分钟间隔的ohlc
- 以增加的时间间隔(15分钟、20分钟、1小时等)将生成的数据帧用作更多新数据帧的输入
pd将数据帧的index
转换为datetime
索引,然后使用floor
将该索引转换为5min
频率,创建5min
分组,然后group
将该分组上的数据帧分组,并首先使用聚合列open
,使用last
关闭
,high
使用max
,low
使用min
和volume
使用sum
:
agg_dict = {'open':'first', 'close': 'last',
'high': 'max', 'low': 'min', 'volume': 'sum'}
out = df.groupby(pd.to_datetime(df.index, unit='s').floor('5min')).agg(agg_dict)
结果
对于示例数据帧
>>> out
open close high low volume
timestamp
2013-04-01 00:05:00 93.25 93.30 100.00 93.25 220.276862
2013-04-01 00:10:00 93.35 93.47 93.47 93.35 22.021627
2021-03-09 15:05:00 54566.00 54513.00 54598.00 54501.00 12.500799
2021-03-09 15:10:00 54511.00 54456.00 54511.00 54456.00 13.363885
哇!先生,你是某种巫师。这正是我所需要的,基本上是两行代码。难以置信的谢谢