对数据帧中的一列求和,其中一列满足条件,但按另一列分组

2024-09-25 08:30:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这样一个数据帧:

        Ref_No  Definition  Total_to_Add
    0   ref1        B            20        
    1   ref2        A            30        
    2   ref1        B            40        
    3   ref2        A            50        
    4   ref1        B            60        
    5   ref2        B            50         
    6   ref1        B            60        
    7   ref2        B            50        
    8   ref1        B            60        

对于每个引用,如果它们是“B”且引用号相同,我想将Total\和\u相加(A将有另一列)。有100个参考号。你知道吗

我可以把满足一个条件的加起来,比如:

df['ANSWER'] = df[df['Definition']=='A']['Total_to_Add'].sum()

或者我可以用这样的参照物来分组:

df['ANSWER']=(df.groupby('Ref_No')['Total_to_Add'].transform('sum'))

但我似乎无法组合这些函数,即创建一个新的列,如果定义为“B”和“total by Ref\u No”,则将其合计

我的目标是输出如下:

        Ref_No  Definition  Total_to_Add  Total_'B'
    0   ref1        B            20        240
    1   ref2        A            30        100
    2   ref1        B            40        240
    3   ref2        A            50        100
    4   ref1        B            60        240
    5   ref2        B            50        100 
    6   ref1        B            60        240
    7   ref2        B            50        100
    8   ref1        B            60        240

感谢你的智慧!谢谢


Tags: to数据noanswerrefadddf条件
3条回答

尝试:

df['Total_B'] = (df['Definition'].eq('B').mul(df['Total_to_Add'])
                 .groupby(df['Ref_No']).transform('sum'))

[输出]

  Ref_No Definition  Total_to_Add  Total_B
0   ref1          B            20      240
1   ref2          A            30      100
2   ref1          B            40      240
3   ref2          A            50      100
4   ref1          B            60      240
5   ref2          B            50      100
6   ref1          B            60      240
7   ref2          B            50      100
8   ref1          B            60      240

如果“Definition”==“B”,这将在“Total\u B”列中生成“Total\u to\u Add”的和。df['Total_B']=df[df['Definition']=='B'].groupby(by=['Ref_No','Definition'])['Total_to_Add'].transform('sum')

^{}将非B值替换为0,然后使用^{}

df['ANSWER']= (df['Total_to_Add'].where(df.Definition=='B', 0)
                                 .groupby(df['Ref_No']).transform('sum'))
print (df)
  Ref_No Definition  Total_to_Add  Total_'B'  ANSWER
0   ref1          B            20        240     240
1   ref2          A            30        100     100
2   ref1          B            40        240     240
3   ref2          A            50        100     100
4   ref1          B            60        240     240
5   ref2          B            50        100     100
6   ref1          B            60        240     240
7   ref2          B            50        100     100
8   ref1          B            60        240     240

相关问题 更多 >