如何在 Python 中使用 Groupby 计算累积和?

数据挖掘 Python 熊猫
2021-10-04 10:48:47

我正在尝试使用 Pandas 的 DataFrame 计算 groupby 的累积总和。但是,我没有得到预期的输出。

我的源代码:

import pandas as pd
Employee = [['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'],
        ['CSE', 'CSE', 'EEE', 'EEE', 'CE', 'CE', 'ME', 'ME'],
        ['Cat-1', 'Cat-2', 'Cat-1', 'Cat-2', 'Cat-1', 'Cat-2', 'Cat-1', 'Cat-2']]

index = pd.MultiIndex.from_arrays(Employee, names=['Name', 'Dept', 'Category'])

Scale = [1, 2, 2, 3, 3, 1, 2, 3]
Salary = [100, 200, 200, 300, 300, 100, 200, 300]

df = pd.DataFrame({'scale': Scale,
               'salary': Salary},
              index=index)

df1 = df.groupby(['Category', 'scale']).cumsum()
print(df1)

预期输出:

Cat-1    1         100
         2         500
         3         800
Cat-2    1         100
         2         300
         3         900

获得的结果:

Name Dept Category        
A    CSE  Cat-1        100
B    CSE  Cat-2        200
C    EEE  Cat-1        300
D    EEE  Cat-2        500
E    CE   Cat-1        600
F    CE   Cat-2        600
G    ME   Cat-1       1000
H    ME   Cat-2       1200

Groupby 不起作用。但是,如果我使用sum()(ie df1 = df.groupby(['Category', 'scale']).sum()) 而不是cumsum(), groupby 可以完美运行。

1个回答

每个组有多个条目,因此您需要将数据聚合两次,即使用groupby两次。一次获得每组的总和,一次计算这些总和的累积总和。

可以按如下方式完成:

df.groupby(['Category','scale']).sum().groupby('Category').cumsum()

请注意,cumsum应该将其应用于按Category列分区的组,以便获得所需的结果。