简体   繁体   English

熊猫:添加像= A1 / SUMIF(B:B,B1,A:A)这样的excel SUMIF列

[英]Pandas: Adding an excel SUMIF column like =A1/SUMIF(B:B,B1,A:A)

I have a pandas DataFrame like: 我有一个像这样的熊猫DataFrame:

    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

I would like to add a fourth column that takes each treat as a percentage of the total treats for pets of that kind. 我想添加第四列,其中将每种食物占此类宠物总食物的百分比。 So, the treat value in row 0, divided by the sum of all treats for pets matching "cat" (and so on for each row). 因此,第0行中的请客值除以与“猫”匹配的宠物的所有待客之和(每行依此类推)。

In Excel, I think I would do something like this: 在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)

Anyone have an idea how I could add this "treat_percent" column using pandas? 任何人都知道如何使用熊猫添加此“ 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

So far, I have tried: 到目前为止,我已经尝试过:

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

and

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

You can using transform 您可以使用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

you might try: 您可以尝试:

df['treat_rate'] = df.groupby('pet').treats.apply(lambda x: x/sum(x)) 

or better: 或更好:

df['treat_rate'] = df.groupby('pet').treats.transform(lambda x: x/sum(x))

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM