作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个数据集,我想按列和数据集中每个月的数据进行分组。我使用 pd.Grouper()
作为每月分组日期部分。
df.groupby(['A',pd.Grouper(key='date', freq='M')]).agg({'B':list})
但这仅返回实际有数据的每个 A
、B
的月份。我还希望每个月都没有 A
、B
组合的数据。我在 pd.Grouper()
文档中没有看到此选项。
最佳答案
给定这个数据框:
date A B
2018-01-01 1 3
2018-03-01 2 4
在 groupby 之后,您可以使用 resample BUT 来重新采样 unfortunately您需要自己创建 MultiIndex:
In [11]: res = df.groupby(['A',pd.Grouper(key='date', freq='M')]).agg({'B':list})
In [12]: m = pd.MultiIndex.from_product([df.A.unique(), pd.date_range(df.date.min(), df.date.max() + pd.offsets.MonthEnd(1), freq='M')])
In [13]: m
Out[13]:
MultiIndex(levels=[[1, 2], [2018-01-31 00:00:00, 2018-02-28 00:00:00, 2018-03-31 00:00:00]],
labels=[[0, 0, 0, 1, 1, 1], [0, 1, 2, 0, 1, 2]])
In [14]: res.reindex(m)
Out[14]:
B
1 2018-01-31 [3]
2018-02-28 NaN
2018-03-31 NaN
2 2018-01-31 NaN
2018-02-28 NaN
2018-03-31 [4]
注意:用 [] 填充有点棘手,理想情况下您能够解决这个问题(通常不建议在 DataFrame 中使用列表)。
关于python - 如何让 pd.Grouper() 包含空组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54355740/
我是一名优秀的程序员,十分优秀!