Панды: добавление столбца Excel SUMIF, например = A1 / SUMIF (B: B, B1, A: A) - PullRequest
0 голосов
/ 27 апреля 2018

У меня есть пандас 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)

У кого-нибудь есть идея, как я могу добавить этот столбец "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()

Ответы [ 2 ]

0 голосов
/ 27 апреля 2018

вы можете попробовать:

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))
0 голосов
/ 27 апреля 2018

Вы можете использовать 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...