首页 > 解决方案 > 为具有最大计数的组获取 groupby 标签的有效方法

问题描述

假设我以iris数据集为例。我随机采样数据以获得数据的子集。接下来我想找到类数的计数,因此我按 Species 对数据进行分组,并使用该.count()函数来获取每个类中实例数的计数。到目前为止,一切都很好

这是执行此操作的代码:

import numpy as np
import pandas as pd
iris_df = pd.read_csv('./data/iris.csv') # this file has 150 rows
subset_df = iris_df.iloc[np.random.randint(1, 150, 60), ]
subset_df.groupby('Species', as_index = False).count()

## Output
      Species  Sepal.Length  Sepal.Width  Petal.Length  Petal.Width
0      setosa            19           19            19           19
1   virginica            20           20            20           20
2  versicolor            21           21            21           21

现在这是我的问题:有没有办法用大多数样本获取实例​​的组标签。所以在上面的输出中:versicolor有最多的样本,所以我想得到那个组标签。

我尝试取上述行的最大值,但这会按字符对物种列进行排序并返回virginica,这绝对是不正确的,但输出是有道理的。

我可以想到的另一种获取组名的方法是.groups通过运行以下代码在按数据框分组时使用

species_dict = subset_df.groupby('Species', as_index = False).groups
max_ind = np.argmax([len(species_dict[k]) for k in species_dict.keys()])
print(list(species_dict.keys())[max_ind])

有没有更好的方法,更有效的方法,使用我错过的一些 Pandas 功能。请告诉我

标签: python-3.xpandaspandas-groupby

解决方案


.max()['Species']在第 5 行末尾添加。


推荐阅读