Groupby() и mean() в фрейме данных pandas с возвращением более двух столбцов

#python #pandas #group-by #mean

#питон #панды #группа-по #означать

Вопрос:

Очень простой вопрос, который я пока не могу найти.

Это мой фрейм данных

 id Name Lastname Journal Article Score 0 1 John Doo Journal2 Article1 23 1 2 John Doo Journal1 Article2 12 2 3 Bill Foo Journal17 Article3 8  

Когда я использую

 df.groupby('id', as_index=False)['Score'].mean()  

это дает мне

 id Score 0 1 17.5 1 2 8.0  

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

 id Name Lastname Score 0 1 Joe Doe 17.5 1 2 Bill Foo 8.0  

Комментарии:

1. Ваш пример не совсем последователен, поэтому не уверен, но .groupby( ).Score.transform('mean') может быть интересным.

Ответ №1:

Если одни и те же значения id в Name столбцах и Lastname столбцах добавляют его в groupby :

 df.groupby(['id','Name','Lastname'], as_index=False)['Score'].mean()  

Если возможно, возможны разные значения для каждой id группы, извлеките первые/последние значения для каждой группы:

 df.groupby('id', as_index=False).agg({'Score':'mean', 'Name':'first', 'Lastname':'first'})  df.groupby('id', as_index=False).agg({'Score':'mean', 'Name':'last', 'Lastname':'last'})  

Комментарии:

1. Спасибо. что делать, если столбец имя содержит NaNs. и выдает мне ошибку в первом решении. как бы вы обновили код?

2. @AnakinSkywalker — Я думаю, что если NaNs нужно второе решение, потому first что возвращайте первые NAN значения, отличные от s, для групп.

3. это дает мне ValueError: No axis named NAME for object type DataFrame в моем локальном фрейме данных

4. Неважно, второе решение сработало идеально, спасибо!

5. @AnakinSkywalker — Можешь проверить print (df.columns.tolist()) ?