如何使用来自 'A'、'B' 和 'C 列的相同值组合对每一行的 'D' 列的值求和?

How to sum up values of 'D' column for every row with the same combination of values from columns 'A','B' and 'C?

我需要 对每一行的 'D' 列的值求和,这些值具有来自列 'A'、'B' 和 'C[= 的相同值组合34=]。最终我需要创建具有独特值组合的DataFrame 'A'、'B' 和 'C' 列以及 D.

列中的相应总和
import numpy as np
df = pd.DataFrame(np.random.randint(0,3,size=(10,4)),columns=list('ABCD'))
df

OT:
    A   B   C   D
0   0   2   0   2
1   0   1   2   1
2   0   0   2   0
3   1   2   2   2
4   0   2   2   2
5   0   2   2   2
6   2   2   2   1
7   2   1   1   1
8   1   0   2   0
9   1   2   0   0

我尝试创建带有空单元格的临时数据框

D = pd.DataFrame([i for i in range(len(df))]).rename(columns = {0:'D'})
D['D'] = ''
D 

OT:
    D
0   
1   
2   
3   
4   
5   
6   
7   
8   
9   

并使用 apply() 对由列 'A'、'B' 和 'C' 组成的唯一行的所有 'D' 列值求和。例如下面的行 returns 来自 'D' 列的值总和 'A'=0,'B'=2,'C'=2:

df[(df['A']==0) & (df['B']==2) & (df['C']==2)]['D'].sum()

OT:
4

函数:

def Sumup(cols):
    A = cols[0]
    B = cols[1]
    C = cols[2]
    D = cols[3]
    
    sum = df[(df['A']==A) & (df['B']==B) & (df['C']==C)]['D'].sum()
    
    return sum

应用于 df 并保存在临时 df D['D']:

D['D'] = df[['A','B','C','D']].apply(Sumup)

后来我想使用 drop_duplicates 但我收到的数据帧由 NaN 组成。

D
OT:
D
0   NaN
1   NaN
2   NaN
3   NaN
4   NaN
5   NaN
6   NaN
7   NaN
8   NaN
9   NaN

任何人都可以给我提示如何处理 NaN 问题或我可以应用什么其他方法来解决原始问题 有问题吗?

import numpy as np
df = pd.DataFrame(np.random.randint(0,3,size=(10,4)),columns=list('ABCD'))

df.groupby(["A", "B", "C"])["D"].sum()
df.groupby(['A','B','C']).sum()