比如说我以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功能是否有更好的方法,更有效的方法。请让我知道
答案 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();