Edu*_*oRL 12 python datetime group-by pandas
我有这样的dataFrame,我想每60分钟分组一次,并在06:30开始分组.
data
index
2017-02-14 06:29:57 11198648
2017-02-14 06:30:01 11198650
2017-02-14 06:37:22 11198706
2017-02-14 23:11:13 11207728
2017-02-14 23:21:43 11207774
2017-02-14 23:22:36 11207776
Run Code Online (Sandbox Code Playgroud)
我在用:
df.groupby(pd.TimeGrouper(freq='60Min'))
Run Code Online (Sandbox Code Playgroud)
我得到这个分组:
data
index
2017-02-14 06:00:00 x1
2017-02-14 07:00:00 x2
2017-02-14 08:00:00 x3
2017-02-14 09:00:00 x4
2017-02-14 10:00:00 x5
Run Code Online (Sandbox Code Playgroud)
但我正在寻找这个结果:
data
index
2017-02-14 06:30:00 x1
2017-02-14 07:30:00 x2
2017-02-14 08:30:00 x3
2017-02-14 09:30:00 x4
2017-02-14 10:30:00 x5
Run Code Online (Sandbox Code Playgroud)
如何告诉函数在6:30以一小时为间隔开始分组?
如果无法通过.groupby(pd.TimeGrouper(freq = '60Min'))完成,那么最好的方法是什么?
向前致敬并非常感谢
Nic*_*eli 16
使用base=30
会同label='right'
中的参数pd.Grouper
.
指定label='right'
使得时间段从6:30(较高侧)开始分组而不是5:30.此外,默认情况下base
设置为0 ,因此需要将这些偏移30以考虑日期的向前传播.
假设,您想要聚合每个子组的第一个元素,然后:
df.groupby(pd.Grouper(freq='60Min', base=30, label='right')).first()
# same thing using resample - df.resample('60Min', base=30, label='right').first()
Run Code Online (Sandbox Code Playgroud)
收益率:
data
index
2017-02-14 06:30:00 11198648.0
2017-02-14 07:30:00 11198650.0
2017-02-14 08:30:00 NaN
2017-02-14 09:30:00 NaN
2017-02-14 10:30:00 NaN
2017-02-14 11:30:00 NaN
2017-02-14 12:30:00 NaN
2017-02-14 13:30:00 NaN
2017-02-14 14:30:00 NaN
2017-02-14 15:30:00 NaN
2017-02-14 16:30:00 NaN
2017-02-14 17:30:00 NaN
2017-02-14 18:30:00 NaN
2017-02-14 19:30:00 NaN
2017-02-14 20:30:00 NaN
2017-02-14 21:30:00 NaN
2017-02-14 22:30:00 NaN
2017-02-14 23:30:00 11207728.0
Run Code Online (Sandbox Code Playgroud)
使用DataFrame.resample
which 是重新采样时间序列的专用方法,这样我们就不需要DataFrame.GroupBy
和pd.Grouper
:
df.resample('60min', base=30, label='right').first()
Run Code Online (Sandbox Code Playgroud)
输出
data
index
2017-02-14 06:30:00 11198648.0
2017-02-14 07:30:00 11198650.0
2017-02-14 08:30:00 NaN
2017-02-14 09:30:00 NaN
2017-02-14 10:30:00 NaN
2017-02-14 11:30:00 NaN
2017-02-14 12:30:00 NaN
2017-02-14 13:30:00 NaN
2017-02-14 14:30:00 NaN
2017-02-14 15:30:00 NaN
2017-02-14 16:30:00 NaN
2017-02-14 17:30:00 NaN
2017-02-14 18:30:00 NaN
2017-02-14 19:30:00 NaN
2017-02-14 20:30:00 NaN
2017-02-14 21:30:00 NaN
2017-02-14 22:30:00 NaN
2017-02-14 23:30:00 11207728.0
Run Code Online (Sandbox Code Playgroud)
注意:当您的数据框中有多列时,您必须指定要聚合的列:
df.resample('60min', base=30, label='right')['data'].first()
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
9566 次 |
最近记录: |