在 'groupby()' 和 'value_counts() 函数之后选择每个组的第一行

Posted

技术标签:

【中文标题】在 \'groupby()\' 和 \'value_counts() 函数之后选择每个组的第一行【英文标题】:Select the first row of each group after 'groupby()' and 'value_counts() function在 'groupby()' 和 'value_counts() 函数之后选择每个组的第一行 【发布时间】:2019-07-17 06:35:02 【问题描述】:

我有一个名为 new_data_set 的数据集,如下所示:

Image

我想找出每年出现次数最多的类型。

所以我这样做了:

new_data_set.groupby('release_year')['genre']).apply(lambda x: x.value_counts())`

它的结果是这样的:result

现在我需要从每个组中获取第一行以获得答案。所以结果应该是这样的:

1960 Drama
1961 Drama
.
.

我应该怎么做?

【问题讨论】:

【参考方案1】:

对于单线粉丝:

df = new_data_set.mode()
df

    release_year    genre
0   2004            a
1   2005            b

【讨论】:

【参考方案2】:

解决方法很多,一个就是添加函数头:

result = (new_data_set.groupby('release_year')['genre']
                    .apply(lambda x: x.value_counts().head(1))
                    .reset_index())
print(result)

【讨论】:

【参考方案3】:

添加index[0],然后添加reset_index

new_data_set = pd.DataFrame(
         'release_year':[2004,2005,2004,2005,2005,2004],
         'genre':list('aaabbb')
)

df = (new_data_set.groupby('release_year')['genre']
                  .apply(lambda x: x.value_counts().index[0])
                  .reset_index()
                 )
print (df)
   release_year genre
0          2004     a
1          2005     b

【讨论】:

以上是关于在 'groupby()' 和 'value_counts() 函数之后选择每个组的第一行的主要内容,如果未能解决你的问题,请参考以下文章

Linq 中的 Groupby 和 where 子句

如何在 Pyspark 中使用 groupby 和数组元素?

在 Pandas 中使用 Keras StandardScaler 和 Groupby 函数

pyspark:groupby 和聚合 avg 和 first 在多个列上

Python Groupby 和绘图

Pandas 在 groupby 和 nlargest 之后创建额外(重复)索引