如何根据另一列值汇总一列 Python

How to sum up a column based on another columns value Python

我有这个例子df

col1 = [1,1,1,2,2,1,1,1,2,2,2]
col2 = [20, 23, 12, 44, 14, 42, 44, 1, 42, 62, 11]

data = {"col1": col1, "col2": col2}
df = pd.DataFrame(data)

我需要添加一个列,每次 col1 为 1 时将 col2 相加,然后在 col1 为 2 时相加。我尝试按 col1 分组,但每次中间有 2 时都会跳过 预期的输出是这样的。

col1    col2  col3
1       20    55 
1       23    55
1       12    55
2       44    58
2       14    58
1       42    87
1       44    87
1       1     87
2       42    115
2       62    115
2       11    115

请告诉我如何处理这个问题

GroupBy.transform 与帮助程序 Series 一起使用,用于由不相等和累积总和的 comapre 移位值生成的连续值:

df['col3'] = df.groupby(df['col1'].ne(df['col1'].shift()).cumsum())['col2'].transform('sum')
print (df)
    col1  col2  col3
0      1    20    55
1      1    23    55
2      1    12    55
3      2    44    58
4      2    14    58
5      1    42    87
6      1    44    87
7      1     1    87
8      2    42   115
9      2    62   115
10     2    11   115

您可以通过创建一个列来完成此操作,该列将在每次 col1 发生变化时进行标记,然后按 groupby 求和:

i = df.col1    
df['Var3'] = i.ne(i.shift()).cumsum()
df['sums'] = df.groupby(['Var3'])['col2'].transform('sum')

这给出了

col1  col2  Var3  sums
0      1    20     1    55
1      1    23     1    55
2      1    12     1    55
3      2    44     2    58
4      2    14     2    58
5      1    42     3    87
6      1    44     3    87
7      1     1     3    87
8      2    42     4   115
9      2    62     4   115
10     2    11     4   115
​