Pandas: 获取出现次数最多的标签

5

我的 dataframe 中有一列包含不同类型的值,我想要获取出现次数最多的那个:

enter image description here

在这种情况下,我想要获取标签为 FM-15 的值,以便之后我可以只查询被标记为它的数据。

我该如何做呢?


现在我可以使用以下方法:

most_count = df['type'].value_counts().max()
s = df['type'].value_counts()
s[s == most_count].index

这段代码返回

这个


Index([u'FM-15'], dtype='object')

但我觉得这样太丑了,而且我不知道如何使用 Index() 对象来查询 df。我只知道类似于 df = df[(df['type'] == 'FM-15')] 的东西。


2
默认情况下,value_counts()会对结果进行排序,因此只需获取第0个索引,例如df [ 'type'] .value_counts() .index [0] - AChampion
1个回答

5
使用 argmax:
lbl = df['type'].value_counts().argmax()

查询数据,

df.query("type==@lbl")

.querydf = df[(df['type'] == 'FM-15')] 执行效率更高。 - Happy001
1
value_counts() 默认已经对结果进行了排序... .index[0] 应该就足够了。 - AChampion
@AChampion 这是真的。但就个人而言,我更喜欢一种更具表现力的方式。 - ZK Zhao
还有一个问题,是否可能获取第二大的“index”?或者将所有的索引放入一个数组中? - ZK Zhao
要将pandas Series ser的索引作为Python列表获取,请执行ser.index.tolist()。正如@AChampion所评论的那样,value_counts()默认是排序的,因此df['type'].value_counts().index[1]应该给出第二大的索引。您不必将索引转换为列表。 - Happy001
从 pandas 1.1.1 开始,argmax 返回 Series 中最大值的 int 位置。使用 idxmax 获取最大值的行标签。 - moi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接