python - 如何让 pd.Grouper() 包含空组
问题描述
我有一个数据集,我想按列和数据集中每个月的数据进行分组。我正在使用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 但为了重新采样,不幸的是您需要自己创建 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 中使用列表)。
推荐阅读
- pandas - 使用 if 条件在不同数据帧上的列之间查找(熊猫)
- r - R中的SVM结果含义
- javascript - 如何使用异步数据库调用通过 useState() 和 useEffect() 设置变量?
- javascript - whatsapp-web.js 中的“@c.us”是什么意思
- sql - 根据连接查找服务器状态查询
- javascript - Asp.NetCore 和 VueJs 之间的自动计算值数组
- panel - 在 stata 中为面板数据中的剧集生成计数器变量
- r - R内存问题中的笛卡尔积
- javascript - node - 使用 puppeteer 访问表格内容
- python - Python中的值错位