2015-04-14 2 views
2

У меня есть ФР так:Группировка и нахождение наиболее частых значения

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

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

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

Protein Peptide 
A  AAA 
B  ABA 

В действительности мне нужны даже три главных значения. Действительно не знаю, как его решить, используя python и pandas?

ответ

4

режим не метод GroupBy, хотя это SeriesDataFrame) метод, так что вы должны передать его 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 
+0

Спасибо! Это сработало! Но мои другие столбцы исчезли (значит, sd). Как их объединить? – Maku

+0

@MPs извините, пропустил бит вопроса, это зависит от того, как вы хотите их объединить (я не думаю, что канонического способа это не имеет смысла?) Возможно, задайте новый вопрос с помощью ввода и желаемого вывода - я думаю, что этот вопрос приятный/самодостаточный/googlable atm! :) –