Pandas DataFrame:每小时分组并应用函数

时间:2017-03-22 21:21:08

标签: python pandas

我在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等。

感谢。

1 个答案:

答案 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