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函数应用于每个组。有什么好方法吗?提前谢谢。
答案 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