You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas按gender执行groupby统计时出现超过两个分组的问题如何解决

问题原因

当前写法的问题出在全局排序逻辑:

  • 你调用sort_values(ascending=False)是对所有(sex, title)组合的计数结果做全量降序排序,完全忽略了sex的层级优先级,最终会出现「M组计数第二的电影 < F组计数第一的电影」这类情况,自然就出现了sex列M、F交替排列的问题。
  • groupby之后生成的MultiIndex虽然默认第一层为sex,但全局排序会直接打破这个层级的聚合顺序。
修复方案

方案1:分组内单独排序(逻辑更贴合需求)

先对sex做外层分组,每个性别组内部单独按评分次数降序排列,最终拼接结果自然会按sex的顺序聚合展示:

# 先统计每个性别下各电影的评分次数
count_df = lens.groupby(['sex', 'title']).size().reset_index(name='rating_count')
# 按sex分组,每组内部按评分次数降序排序
most_rated_gen = count_df.groupby('sex', group_keys=False).apply(
    lambda x: x.sort_values('rating_count', ascending=False)
).set_index(['sex', 'title']) # 不需要MultiIndex结构可删除这行

方案2:排序时指定多字段优先级

如果不需要单独处理每组逻辑,也可以在排序时指定先按sex排序,再按计数值降序,保证sex相同的行聚合在一起:

most_rated_gen = lens.groupby(['sex','title']).size().reset_index(name='rating_count')\
    .sort_values(by=['sex', 'rating_count'], ascending=[True, False])\
    .set_index(['sex', 'title'])

设置sex为索引第一层后,pandas展示时会自动合并相同的第一层索引值,和你给出的示例输出效果一致。

内容的提问来源于stack exchange,提问作者kayak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 18:06:06