【问题标题】:How to sum up values of 'D' column for every row with the same combination of values from columns 'A','B' and 'C?如何用“A”、“B”和“C”列的相同值组合对每一行的“D”列的值求和?
【发布时间】:2020-10-10 05:51:19
【问题描述】:

我需要用来自“A”、“B”和“C”列的相同值组合来总结每一行的“D”列的值。最终我需要创建具有唯一值组合的 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”列值。例如下面的行返回 'A'=0,'B'=2,'C'=2 的 'D' 列的值的总和:

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 问题或者我可以应用什么其他方法来解决原始问题 有问题吗?

【问题讨论】:

标签: python pandas dataframe apply nan


【解决方案1】:
df.groupby(['A','B','C']).sum()

【讨论】:

    【解决方案2】:
    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()
    

    【讨论】:

    • 如果您解释了您提供的代码如何回答问题,这将是一个更好的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-23
    • 1970-01-01
    • 1970-01-01
    • 2021-08-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多