我有一个像pandas 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
我想添加第四列,将每种食物作为此类宠物总食物的百分比。因此,第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)
任何人都知道我如何使用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
到目前为止,我已经尝试过:
df['treat_percent'] = df['pet'] / df.groupby('pet')['treats'].sum()
和
df['treat_percent'] = df['pet'] / df.loc[df['pet'] == df['pet'], 'treats'].sum()
答案 0 :(得分:0)
您可以使用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
答案 1 :(得分:0)
df['treat_rate'] = df.groupby('pet').treats.apply(lambda x: x/sum(x))
或更好:
df['treat_rate'] = df.groupby('pet').treats.transform(lambda x: x/sum(x))