Получите наиболее распространенное значение для каждого значения в строке — pandas df

#python #pandas #pandas-groupby

#питон #панды #панды-групповые

Вопрос:

Это может быть дубликат, пожалуйста, дайте мне знать.

У меня есть панды df, как это:

ID Имя Обычный
Один A
Один A
Один A
Один B
Два C

Я хотел бы вывести что-то вроде этого:

Где наиболее распространенное имя для каждого идентификатора помещается в общий столбец.

ID Имя Обычный
Один A A
Один A A
Один A A
Один B A
Два C C

Я пробовал это, но в этот момент я бросаю дротики в темноте

 df.groupby(['id', 'name']).agg(lambda x:x.value_counts().index[0])  

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

1. df.groupby(['id'])['name'].transform(lambda x: x.value_counts().index[0]) или используйте x.mode()[0] внутри.

2. @QuangHoang Это сработало, спасибо!

Ответ №1:

Это работает:

 df['Common'] = df.groupby('id')['name'].transform(lambda x: x.mode()[0])  

Выход:

 gt;gt;gt; df  id name Common 0 One A A 1 One A A 2 One A A 3 One B A 4 Two C C  

Ответ №2:

Более длительный (потенциально более медленный) процесс заключается в повороте и сопоставлении:

 df.assign(Common = df.id.map(df.pivot(None, 'id', 'name').mode().T.squeeze()))    id name Common 0 One A A 1 One A A 2 One A A 3 One B A 4 Two C C