Группировка и поиск наиболее частых значений


У меня есть такой df:

Protein Peptide
A        AAA
A        AAA
A        ABA
B        AAA
B        ABA
B        ABA

Но мне нужно фильтровать мои данные, находя для каждого значения в столбце 1 верхнее встречающееся значение в столбце 2.

Таким образом, вывод будет выглядеть следующим образом:

Protein Peptide
A        AAA
B        ABA

На самом деле мне нужны даже топ-3 происходящих значений. Действительно не знаете, как решить эту проблему с помощью python и pandas?

1   2   2015-04-14 21:35:00

1 ответ:

Mode не является методом groupby, хотя это метод Series DataFrame), поэтому вы должны передать его в apply :

In [11]: df.groupby('Protein')['Peptide'].apply(lambda x: x.mode()[0])
Out[11]:
Protein
A    AAA
B    ABA
Name: Peptide, dtype: object

Чтобы получить первую тройку, вы можете использовать value_counts (точно так же):

In [12]: df.groupby('Protein')['Peptide'].apply(lambda x: x.value_counts()[:3])
Out[12]:
Protein
A        AAA    2
         ABA    1
B        ABA    2
         AAA    1
dtype: int64