В питоне аналог функции суммирования (dplyr) - PullRequest
2 голосов
/ 01 октября 2019

У меня есть df с пандой данных, и я хотел бы сгруппировать переменную 'house' и выполнить определенные операции с тремя другими переменными: 'var1', 'var2' и 'var3'. Заметим, что три переменные являются числовыми, а переменная var1 принимает значения 1,2,3.

data = {'house':['A', 'B', 'A', 'A', 'B', 'B', 'B'], 'var1':[3, 0, 1, 3,4,5,3], 'var2':[2, 0, 5, 1,4,1,3],'var3':[4, 2, 3, 3,0,5,1]}
df = pd.DataFrame(data) 
df

Теперь я хотел бы создать 3 новые переменные

  1. new_var1 = Подсчитать, сколько раз var3 принимает значения == 3
  2. new_var2 = sum var2(простой агрегат)
  3. new_var3 = сумма var3 (простой агрегат)

Если бы я использовал язык программирования R, я бы сделал это мгновенно

require(dplyr)
data = data.frame('house'=c('A', 'B', 'A', 'A', 'B', 'B', 'B'), 
        'var1'=c(3, 0, 1, 3,4,5,3), 
        'var2'=c(2, 0, 5, 1,4,1,3),
        'var3'=c(4, 2, 3, 3,0,5,1))

df= data %>% group_by(house) %>% summarise(new_var1 = sum(var1 == 3),
                                       new_var2 = sum(var2),
                                       new_var2 = sum(var2))
df

В Python, во-первых, я группирую по

df.groupby(['house'])['var1','var2', 'var3']

Но я бы хотел продолжить с той же строкой кода, и я не знаю, как это сделать. В питоне есть какая-нибудь аналогичная функция суммирования?

1 Ответ

3 голосов
/ 01 октября 2019

Вы можете сделать это, используя agg метод

(df.groupby(['house']).agg({'var1': lambda x: (x==3).sum(), 
                            'var2': 'sum',
                            'var3': 'sum'})
   .rename(columns={"var1": "new_var1", 
                    "var2": "new_var2",
                    "var3":"new_var3"})
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...