通过pandas对行数进行分组

时间:2017-04-23 02:25:35

标签: python pandas

                     open   high    low     close
date                
2017-04-10 09:01:00 3992.0  3992.0  3982.0  3984.0
2017-04-10 09:02:00 3985.0  3988.0  3980.0  3986.0
2017-04-10 09:03:00 3986.0  3986.0  3973.0  3977.0
2017-04-10 09:04:00 3977.0  3983.0  3974.0  3981.0
2017-04-10 09:05:00 3980.0  3980.0  3956.0  3961.0
2017-04-10 09:06:00 3961.0  3968.0  3959.0  3964.0

上面每分钟都会生成一些库存数据。 我想将它们分组为每组15行,然后将ohlc函数应用于每个组。有什么好方法吗?提前谢谢。

2 个答案:

答案 0 :(得分:1)

我怀疑某些事情应该有效:

df.resample('15Min').agg({'open': 'first', 
                          'high': 'max', 
                          'low': 'min', 
                          'close': 'last'})

<强>证明

df
                    open    high    low     close
date                
2017-04-10 09:01:00 3992.0  3992.0  3982.0  3984.0
2017-04-10 09:02:00 3985.0  3988.0  3980.0  3986.0
2017-04-10 09:03:00 3986.0  3986.0  3973.0  3977.0
2017-04-10 09:04:00 3977.0  3983.0  3974.0  3981.0
2017-04-10 09:05:00 3980.0  3980.0  3956.0  3961.0
2017-04-10 09:06:00 3961.0  3968.0  3959.0  3964.0

df.resample('2Min').agg({'open': 'first', 
                          'high': 'max', 
                          'low': 'min', 
                          'close': 'last'})

                    open    high    low     close
date                
2017-04-10 09:00:00 3992.0  3992.0  3982.0  3984.0
2017-04-10 09:02:00 3985.0  3988.0  3973.0  3977.0
2017-04-10 09:04:00 3977.0  3983.0  3956.0  3961.0
2017-04-10 09:06:00 3961.0  3968.0  3959.0  3964.0

答案 1 :(得分:0)

谢谢@Sergey Bushmanov。它解决了我的问题。 并为我的特殊情况增加了更多。 由于有一段时间的差距&#39;在数据中,所以我无法直接使用重新采样。

我在上面的代码中尝试了这个。结果很好。

df.reset_index(inplace=True)  
groupby_list=list((df.index/15).map(lambda x:int(x)))
df.groupby(groupby_list).agg({
        'code':'first','date':'first', 'open': 'first', 
                          'high': 'max', 
                          'low': 'min', 
                          'close': 'last'})

结果:

open    high    code    close   low date
0   3992.0  3992.0  jd1709  3916.0  3914.0  2017-04-10 09:01:00
1   3916.0  3935.0  jd1709  3920.0  3913.0  2017-04-10 09:16:00
2   3919.0  3926.0  jd1709  3921.0  3910.0  2017-04-10 09:31:00
3   3921.0  3923.0  jd1709  3920.0  3913.0  2017-04-10 09:46:00
4   3919.0  3928.0  jd1709  3927.0  3917.0  2017-04-10 10:01:00
5   3926.0  3932.0  jd1709  3927.0  3923.0  2017-04-10 10:31:00
6   3927.0  3928.0  jd1709  3915.0  3912.0  2017-04-10 10:46:00
7   3916.0  3924.0  jd1709  3918.0  3912.0  2017-04-10 11:01:00
8   3919.0  3925.0  jd1709  3916.0  3916.0  2017-04-10 11:16:00
9   3917.0  3928.0  jd1709  3924.0  3912.0  2017-04-10 13:31:00