#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