#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())
?