【发布时间】:2021-06-04 16:33:54
【问题描述】:
我正在尝试总结每个月的类别数量并累积前几个月。分组依据需要按月、年和类别。我尝试了不同的使用 cumsum 的方法,但我就是无法得到它。
这是df:
sample=[
{'name':11,'category':'A','year':2017,'month':1},
{'name':22,'category':'A','year':2017,'month':2},
{'name':33,'category':'B','year':2015,'month':1},
{'name':33,'category':'C','year':2017,'month':3},
{'name':33,'category':'B','year':2017,'month':8},
{'name':44,'category':'B','year':2016,'month':4},
{'name':44,'category':'A','year':2017,'month':6},
{'name':55,'category':'C','year':2016,'month':9},
{'name':55,'category':'C','year':2017,'month':5},
{'name':55,'category':'B','year':2017,'month':11}]
sample_df=pd.DataFrame(sample)
我按月、年和类别分组并按月汇总
sample_counts = sample_df.groupby(['month','year','category']).agg({
'category': 'count',
}).rename(columns={'category':'category_count'}).reset_index()
sample_counts 的输出是这样的:
month year category category_count
1 2015 B 1
1 2017 A 1
2 2017 A 1
3 2017 C 1
4 2016 B 1
5 2017 C 1
6 2017 A 1
8 2017 B 1
9 2016 C 1
11 2017 B 1
所以我希望输出添加所有 B(例如)随着月份的进展
所以到 2017 年 11 月,“B”总和应该是 2。
我尝试了不同的变体
cumul_df=sample_counts.groupby(['month','year','category']).sum().groupby(level=0).cumsum().reset_index()
我希望 FINAL 输出 看起来像这样(仅在下面显示 2017 年,但 2016 年和 2018 年将是相同的逻辑和外观,并将在下表中显示):
Category Month Year Cumulative_By_Category
A 1 2017 1
A 2 2017 2
A 3 2017 2
A 4 2017 2
A 5 2017 2
A 6 2017 3
A 7 2017 3
A 8 2017 3
A 9 2017 3
A 10 2017 3
A 11 2017 3
A 12 2017 3
B 1 2017 0
B 2 2017 0
B 3 2017 0
B 4 2017 0
B 5 2017 0
B 6 2017 0
B 7 2017 0
B 8 2017 1
B 9 2017 1
B 10 2017 1
B 11 2017 2
B 12 2017 2
C 1 2017 0
C 2 2017 0
C 3 2017 1
C 4 2017 1
C 5 2017 2
C 6 2017 2
C 7 2017 2
C 8 2017 2
C 9 2017 2
C 10 2017 2
C 11 2017 2
C 12 2017 2
【问题讨论】:
-
你的预期输出是什么
-
嗨,我发布了 2017 年的输出。不想通过添加 2016 年和 2018 年来让它更长,因为它是相同的逻辑/外观
-
还是很难理解..为什么2017年的A没有0
-
因为 2017 年 1 月存在 A 类。但是 B 和 C 没有,所以它们是 0
-
每年每个类别每月累积
标签: python pandas group-by aggregate cumsum