gpt4 book ai didi

python - 如何让 pd.Grouper() 包含空组

转载 作者:行者123 更新时间:2023-11-30 22:00:15 25 4
gpt4 key购买 nike

我有一个数据集,我想按列和数据集中每个月的数据进行分组。我使用 pd.Grouper() 作为每月分组日期部分。

df.groupby(['A',pd.Grouper(key='date', freq='M')]).agg({'B':list})

但这仅返回实际有数据的每个 AB 的月份。我还希望每个月都没有 AB 组合的数据。我在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com