如何按时段对pandas DataFrame进行分组?

时间:2018-09-21 15:16:38

标签: python pandas

我有一些财务数据(例如):

prices

                             open_price. high.   low.    close_price
2018-09-03 00:00:00+00:00    103.24      103.77  102.95  103.89 
2018-09-04 00:00:00+00:00    103.89      104.10  103.50  103.95
2018-09-05 00:00:00+00:00    103.95      104.20  103.90  104.15
2018-09-06 00:00:00+00:00    104.15      104.56  103.50  104.20
(...)
2018-09-19 00:00:00+00:00    108.42      108.85  108.19. 108.60
2018-09-20 00:00:00+00:00    108.60      108.89  108.40  108.75

我试图按2天的时间对这些数据进行分组。如果我使用

prices.resample('2B', closed='left', label='left').first()

财务日期如下:

                             open_price. high.   low.    close_price
2018-09-03 00:00:00+00:00    103.24      103.77  102.95  103.89
2018-09-05 00:00:00+00:00    103.95      104.20  103.90  104.15
(...)
2018-09-19 00:00:00+00:00    108.42      108.85  108.19. 108.60

我正在寻找一种方法:日期2018-09-03将采用2018-09-03的开盘价,2018-09-032018-09-04的最低价和最高价,以及最终2018-09-04的收盘价...下一个日期将是2018-09-05,以2018-09-05的开盘价,2018-09-052018-09-06的最低价和最高价以及终于2018-09-06结束了。

它应该看起来像这样:

                             open_price. high.   low.    close_price
2018-09-03 00:00:00+00:00    103.24      104.10  102.95  103.95 
2018-09-05 00:00:00+00:00    103.95      104.56  103.50  104.20
(...)
2018-09-19 00:00:00+00:00    108.42      108.89  108.19. 108.60

有没有简单的方法可以做到这一点?谢谢。

1 个答案:

答案 0 :(得分:1)

您可以将resampleagg一起使用

d={'open_price.':'first','high.':'max','low.':'min','close_price':'last'}
df.resample('2B', closed='left', label='left').agg(d)
Out[1031]: 
            open_price.   high.    low.  close_price
2018-09-03       103.24  104.10  102.95       103.95
2018-09-05       103.95  104.56  103.50       104.20