我在pandas数据框中有一些看起来像这样的股票数据(index = datetime)
ask bid
datetime
2017-03-01 00:00:07.346 1.33145 1.33135
2017-03-01 00:00:07.498 1.33147 1.33134
2017-03-01 00:00:08.124 1.33147 1.33133
2017-03-01 00:00:08.659 1.33148 1.33134
2017-03-01 00:00:12.104 1.33146 1.33134
2017-03-01 00:00:12.858 1.33147 1.33134
2017-03-01 00:00:17.583 1.33148 1.33135
我想将这些数据分组为两小时的块并添加一些新列。
Open Ask, Close Ask, Max Ask, Open Bid, Max Bid, Close Bid
datetime
2017-03-01 00:00
2017-03-01 02:00
...
如果OpenAsk是2小时内的第一个卖价,则Close Ask是两小时内的最后一个卖价等等。
我该怎么做?我想我可以使用重新采样,但我不知道如何找到Open Ask,Close Ask等。
感谢。
答案 0 :(得分:2)
快速回答
df.groupby(pd.TimeGrouper('2H')).agg(['first', 'last', 'max'])
ask bid
first last max first last max
datetime
2017-03-01 1.33145 1.33148 1.33148 1.33135 1.33135 1.33135
使用格式生成所需结果
fs = dict(Open='first', Close='last', Max='max')
ag = dict(Ask=fs, Bid=fs)
gp = pd.TimeGrouper('2H')
d1 = df.rename(columns=str.capitalize).groupby(gp).agg(ag)
d1.sort_index(axis=1, ascending=False, inplace=True)
d1.columns = d1.columns.map('{0[1]} {0[0]}'.format)
print(d1)
Open Ask Max Ask Close Ask Open Bid Max Bid Close Bid
datetime
2017-03-01 1.33145 1.33148 1.33148 1.33135 1.33135 1.33135