如何在Pandas分组后获取每组中重复次数Top N的类别?
解决每个回合分组取Top N问题类别的方法
你当前的代码里,data.groupby(['Round']).Category.value_counts()会生成一个带多级索引(Round + Category)的Series,其中每个Round分组内的Category已经按出现次数降序排列了。但直接调用.head(n)只会取整个结果的前n条,而非每个分组的前n条。
有两种简单的解决方式:
方法一:利用多级索引的分组取数
因为value_counts()返回的结果索引是Round(一级)和Category(二级),可以直接按一级索引分组后取每个组的前n条:
data.groupby(['Round']).Category.value_counts().groupby(level=0).head(n)
方法二:在分组内直接应用head(n)
通过apply在每个Round分组内部先统计类别频次,再取前n个:
data.groupby('Round').apply(lambda g: g['Category'].value_counts().head(n))
如果需要把结果整理成普通的DataFrame格式(而非多级索引),可以再加一步.reset_index(name='Count'),比如:
data.groupby(['Round']).Category.value_counts().groupby(level=0).head(n).reset_index(name='Count')
内容的提问来源于stack exchange,提问作者Konrad Lubelski
相关产品推荐
相关产品推荐

