Pandas数据框:按小时分组并应用函数

3
我有一些股票数据,存储在一个 Pandas 数据框中,长这样(索引为日期时间):
                            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小时期间的第一个询价价格,“CloseAsk”是两小时期间的最后一个询价价格,等等。您可以使用“resample”方法来实现此目标,但是如何找到“OpenAsk”、“CloseAsk”等价格需要进一步的处理。希望对您有所帮助。
1个回答

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接