如何根据另一列值汇总一列 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
我有这个例子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