Как использовать функцию присваивания после группового в Pandas Dataframe - PullRequest
2 голосов
/ 26 сентября 2019

Мне любопытно, сможем ли мы использовать функцию присвоения после группового в Python.Я не хочу делать это, сохраняя сгруппированные данные и затем используя assign.

Допустим, у нас есть:

import pandas as pd

data=pd.DataFrame({'Group':['A','A','A','B','B','B'],'One':[1,12,4,5,4,3],'Two':[5,3,4,5,2,7,]})

  Group  One  Two
0     A    1    5
1     A   12    3
2     A    4    4
3     B    5    5
4     B    4    2
5     B    3    7

Следующий код не работает, потому что данные, используемые внутриФункция назначения не сгруппирована:

data.groupby('Group').sum().assign(one_two=data['One']/data['Two'])

Ожидаемый результат:

       One  Two  one_two
Group                   
A       17   12      1.416
B       12   14      0.857

Опять же, я не хочу назначать сгруппированные данные и новый фрейм данных, а затем использоватьназначение.Я хочу сделать это в той же строке кода.

Ответы [ 2 ]

4 голосов
/ 26 сентября 2019

Использование lambda:

df = data.groupby('Group').sum().assign(one_two=lambda x: x['One']/x['Two'])
print (df)
       One  Two   one_two
Group                    
A       17   12  1.416667
B       12   14  0.857143
3 голосов
/ 26 сентября 2019

Использование DataFrame.eval

data.groupby('Group').sum().eval('one_two = One / Two')

       One  Two   one_two
Group
A       17   12  1.416667
B       12   14  0.857143
...