Держите ряды, принадлежащие к самой большой группе, только в пандах - PullRequest
0 голосов
/ 17 декабря 2018

У меня есть DataFrame, подобный этому:

df = pd.DataFrame({'id':['pt1','px1','t95','sx1','dc4', 'px5'],
'feature':['f7','f7', 'f7','f8','f8', 's1'],
'score':['2','3.3','4','8','4.9', '6']})  

Я хочу:
1 - вычислить размер группы для каждой группы в столбце "feature"
(результат будет f7: 3;f8: 2; s1: 1)
2 - найти максимальный размер группы (который равен f7: 3)
3 - сохранить строки, принадлежащие группе с максимальным размером (f7), и удалить оставшуюся частьстроки

Окончательный pd.DataFrame будет:

id feature score
pt1   f7      2
px1   f7     3.3
t95   f7      4

Спасибо,

Ответы [ 2 ]

0 голосов
/ 24 августа 2019

Если вам на самом деле не нужен размер группы, вы можете сделать проще без groupby.

Найдите самую частую группу, затем отфильтруйте по этой группе:

df.loc[df['feature'] == df['feature'].mode()[0]]

  feature   id score
0      f7  pt1     2
1      f7  px1   3.3
2      f7  t95     4

BTW, если вы хотите получить размер группы, вы можете просто сделать

df.groupby('feature')['feature'].count()
0 голосов
/ 17 декабря 2018

Используйте GroupBy + tranform с count вместе с дополнительным этапом фильтрации:

v = df.groupby('feature').feature.transform('count')
df[v.eq(v.max())]

    id feature score
0  pt1      f7     2
1  px1      f7   3.3
2  t95      f7     4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...