有效获取最大数量的组的分组标签的方法

时间:2019-08-15 09:43:47

标签: python-3.x pandas pandas-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功能是否有更好的方法,更有效的方法。请让我知道

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

如果我正确理解了您的问题(您想返回子集中最频繁的标签)。我认为您只需使用熊猫value_counts()就可以不用groupby函数。

这将创建一个以标签为索引的熊猫系列,并作为数据进行计数。您可以将其设置为按从高到低的顺序排序,然后选择顶部索引。

use Illuminate\Database\Eloquent\Builder;

$input = 'laravel';

Post::whereHas('tags', function (Builder $query) use ($input) {
    $query->where('name', 'like', '%' . $input .'%');
})->orWhere('name', 'like', '%' . $input . '%')->get();