我有这样的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来解决它?
答案 0 :(得分:4)
模式不是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