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

Pandas如何按subject分组后按verb列值出现频次降序排序

解决方案

完全不需要借助df_.groupby("subject").groups输出的列表字典处理,pandas原生支持直接在DataFrame内完成全流程操作,代码更简洁、运行效率更高。

核心实现代码

直接在分组后对verb列调用value_counts()即可,该方法默认会按统计值从高到低排序,输出结果重命名列后就完全匹配需求:

# 按主语分组,统计每个主语下各动词的出现频次,组内自动按频次降序排列
result = df_.groupby("subject")["verb"].value_counts().reset_index(name="动词计数")

效果说明

输出结果固定包含三列:

  • subject:主语代词
  • verb:谓语动词
  • 动词计数:对应动词在该主语分组下的出现次数

每个主语分组内的动词会自动按出现次数从高到低排列,比如I分组下出现2次的said会自动排在该分组首位,和预期效果完全一致。

可选调整

如果你需要固定三个代词的展示顺序(比如固定按I、she、he的顺序展示分组),可以追加以下代码自定义排序规则:

# 定义主语的固定排序优先级
subject_sort_rule = pd.CategoricalDtype(categories=["I", "she", "he"], ordered=True)
result["subject"] = result["subject"].astype(subject_sort_rule)
# 先按主语自定义顺序排序,同主语下按动词计数降序排列
result = result.sort_values(by=["subject", "动词计数"], ascending=[True, False])

补充说明

你之前使用的df_.groupby(["subject"]).count()是统计每个主语下所有列的非空值总条数,无法拆分到单个动词维度的频次;而分组后直接对目标列做value_counts()是pandas针对这类分组频次统计场景的原生实现,相比遍历groups字典的写法,在千条级以上数据量下运行速度优势明显。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 00:01:20