首页 > 解决方案 > 大熊猫的分组总和

问题描述

假设我有一个如下所示的数据框:

Input

item_code    qty

 10034        5
              4
              3

 10035        2
              1

我想在 qty 列之后添加一个新的列名 total 并根据 item_code 列放置总和。

输出

    item_code    qty   total

     10034        5      12
                  4
                  3

     10035        2       3
                  1

标签: pandaspandas-groupby

解决方案


使用 ifitem_code是列:

df['total'] = df.groupby(df['item_code'].replace('',np.nan).ffill())['qty'].transform('sum')

使用 ifitem_code是级别MultiIndex

df['total'] = df.groupby(level=0)['qty'].transform('sum')

如果需要删除重复的值(替换为空字符串)是可能的,但是得到混合值 - 带有数字的字符串,所以接下来的处理应该是有问题的:

df['total'] = df['total'].mask(df.index.get_level_values('item_code').duplicated(), '')

推荐阅读