微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Cumsum 与 groupby 用于日期累积

如何解决Cumsum 与 groupby 用于日期累积

我正在尝试对每个月的类别数量求和并累计前几个月。 group by 需要按月、年和类别。我尝试了不同的使用 cumsum 的方法,但我就是不明白。

这是df:

sample=[
{'name':11,'category':'A','year':2017,'month':1},{'name':22,'month':2},{'name':33,'category':'B','year':2015,'category':'C','month':3},'month':8},{'name':44,'year':2016,'month':4},'month':6},{'name':55,'month':9},'month':5},'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','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

解决方法

如果我理解正确,这只是cumcount

sample_df['cat_count'] = sample_df.groupby(['year','category']).cumcount() + 1

输出:

   name category  year  month  cat_count
0    11        A  2017      1          1
1    22        A  2017      2          2
2    33        B  2015      1          1
3    33        C  2017      3          1
4    33        B  2017      8          1
5    44        B  2016      4          1
6    44        A  2017      6          3
7    55        C  2016      9          1
8    55        C  2017      5          2
9    55        B  2017     11          2

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。