如何使用“A”、“B”和“C”列中的值的相同组合对每行的“D”列值进行求和?

我需要将每一行的“D”列值与“A”、“B”和“C”列中的值的相同组合相加。最终,我需要使用“A”、“B”和“C”列中的值的唯一组合以及 D 列中的相应总和来创建 DataFrame。


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'] = ''


OT:

    D

0   

1   

2   

3   

4   

5   

6   

7   

8   

9   

并使用 apply() 对由列“A”、“B”和“C”组成的唯一行的所有“D”列值求和。例如,下面的行返回“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 并保存在 temp 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 问题,或者我可以应用什么其他方法来解决原始问题?


偶然的你
浏览 189回答 2
2回答

SMILET

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

红颜莎娜

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()
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python