【发布时间】:2018-05-30 04:15:01
【问题描述】:
我正在尝试将 x 天的组在另一列的组内。由于某种原因,当我添加另一个级别的分组时,分组行为发生了更改。
参见下面的玩具示例:
创建一个包含 40 个连续日期、一个 ID 列和随机值的随机数据框:
import numpy as np
import pandas as pd
df = pd.DataFrame(
{'dates':pd.date_range('2018-1-1',periods=40,freq='D'),
'id': np.concatenate((np.repeat(1,10),np.repeat(2,30))),
'amount':np.random.random(40)
}
)
我想先按id 分组,然后在这些组中连续 7 天进行分组。我愿意:
(df
.groupby(['id',pd.Grouper(key='dates',freq='7D')])
.amount
.agg(['mean','count'])
)
输出是:
mean count
id dates
1 2018-01-01 0.591755 7
2018-01-08 0.701657 3
2 2018-01-08 0.235837 4
2018-01-15 0.650085 7
2018-01-22 0.463854 7
2018-01-29 0.643556 7
2018-02-05 0.459864 5
第二组发生了一些奇怪的事情!我希望看到 4 组 7 组,然后是最后一组 2 组。当我在仅使用 id=2 的数据帧上运行相同的代码时,我确实得到了我真正期望的结果:
df2=df[df.id==2]
(df2
.groupby(['id',pd.Grouper(key='dates',freq='7D')])
.amount
.agg(['mean','count'])
)
输出
mean count
id dates
2 2018-01-11 0.389343 7
2018-01-18 0.672550 7
2018-01-25 0.486620 7
2018-02-01 0.520816 7
2018-02-08 0.529915 2
这里发生了什么?它是否首先在id=2 组中创建了一组 4 人,因为id=1 组中的最后一个组只有 3 行?这不是我想做的!
【问题讨论】:
标签: python pandas datetime group-by pandas-groupby