首页 > 解决方案 > Pandas:添加一个 excel SUMIF 列,例如 =A1/SUMIF(B:B,B1,A:A)

问题描述

我有一个熊猫数据框,例如:

    pet  treats lbs
0   cat    2    5.0
1   dog    1    9.9
2  snek    3    1.1
3   cat    6    4.5
4   dog    1    9.4

我想添加第四列,将每种款待占该类宠物总款待的百分比。因此,第 0 行中的零食值除以匹配“猫”的宠物的所有零食的总和(每行以此类推)。

在 Excel 中,我想我会这样做:

   A    B    C    D
1  cat  2   5.0   =B1/SUMIF(A:A,A1,B:B)
2  dog  1   9.9   =B2/SUMIF(A:A,A2,B:B)
3  snek 3   1.1   =B3/SUMIF(A:A,A3,B:B)
4  cat  6   4.5   =B4/SUMIF(A:A,A4,B:B)
5  dog  1   9.4   =B5/SUMIF(A:A,A5,B:B)

任何人都知道如何使用熊猫添加这个“treat_percent”列?

    pet  treats  lbs  treat_percent
0   cat    2    5.0   33.33
1   dog    1    9.9   50.00
2  snek    3    1.1   100.00
3   cat    6    4.5   66.67
4   dog    1    9.4   50.00

到目前为止,我已经尝试过:

df['treat_percent'] = df['pet'] / df.groupby('pet')['treats'].sum()

df['treat_percent'] = df['pet'] / df.loc[df['pet'] == df['pet'], 'treats'].sum()

标签: pythonpandas

解决方案


你可以使用transform

df['treat_rate']=df.treats/df.groupby('pet').treats.transform('sum')
df
Out[153]: 
    pet  treats  lbs  treat_rate
0   cat       2  5.0        0.25
1   dog       1  9.9        0.50
2  snek       3  1.1        1.00
3   cat       6  4.5        0.75
4   dog       1  9.4        0.50

推荐阅读