【发布时间】:2021-10-14 11:04:41
【问题描述】:
我想在自定义日期范围内对我的数据进行分组和汇总。我想按月范围分组,但从每个月的第 10 天开始和结束。 Pandas Grouper 中默认的freq 值M 或MS 仅允许每个月的第一天或最后一天。根据文档,我认为使用 offset 参数可以让我在每个月的第 10 天开始和结束,但它似乎没有效果。 origin 参数似乎也没有效果。请看下面的例子:
创建玩具数据框(df):
df = pd.DataFrame(columns=["date", "amount"], data=[["2021-01-01", 1],
["2021-01-02", 1],
["2021-01-20", 1],
["2021-02-02", 1],
["2021-02-11", 1],
["2021-03-05", 1],
["2021-03-27", 1],])
df["date"] = pd.to_datetime(df["date"])
df 现在看起来像:
date amount
0 2021-01-01 1
1 2021-01-02 1
2 2021-01-20 1
3 2021-02-02 1
4 2021-02-11 1
5 2021-03-05 1
6 2021-03-27 1
现在我尝试使用 offset 参数按自定义的每月范围进行分组。我希望它的范围是从每个月的第 10 天到下个月的第 9 天。另外,我希望在2021-01-05 开始我的分组,不管前几天。
df.groupby(pd.Grouper(key='date', freq="1MS", closed="left",
offset="10D", origin="2021-01-05")).sum()
预期输出:
amount
date
2021-01-10 2
2021-02-10 2
2021-03-10 1
实际输出:
amount
date
2021-01-01 3
2021-02-01 2
2021-03-01 2
如您所见,offset 和 origin 参数似乎都没有被考虑在内!
编辑 1:This question 是相关的,因为最终目标相似,但没有询问 offset 和 origin 的使用。此外,该问题的答案还不够充分。
编辑 2:删除了代码和输出的图像,并替换为文本代码。
【问题讨论】:
-
请分享具有预期输出的可重现示例
-
已更新以解决您的 cmets,谢谢。
标签: python pandas group-by pandas-groupby