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

如何在Pandas的value_counts结果中添加对应topic列信息?

需求与解决方案

问题

给定如下Pandas DataFrame(字段说明:sentence=句子,userid=用户ID,topic=话题):

句子         用户ID  话题
hello        1001  闲聊
hi           1002  闲聊
hello        1002  闲聊
how are you? 1003  提问
hello        1004  闲聊
what is new? 1005  提问
hi           1006  闲聊
hello        1007  闲聊

执行df['句子'].value_counts()只能得到句子的频次统计,结果如下:

hello 4
hi 2
how are you? 1
what is new? 1

现在需要得到同时包含对应话题信息的统计结果,目标格式如下:

hello 4 闲聊
hi 2 闲聊
how are you? 1 提问
what is new? 1 提问

实现代码

方法一:分组聚合

利用groupby同时按「句子」和「话题」分组(因每个句子对应的话题唯一,分组不会拆分同一句子的统计),统计每组行数后格式化输出:

# 分组统计频次
stat_df = df.groupby(['句子', '话题']).size().reset_index(name='频次')
# 按目标格式打印结果
for _, row in stat_df.iterrows():
    print(f"{row['句子']} {row['频次']} {row['话题']}")

方法二:合并频次与映射表

先单独统计句子频次,再和去重后的「句子-话题」映射表合并,最后输出:

# 获取句子频次表
count_df = df['句子'].value_counts().reset_index(name='频次')
# 获取句子与话题的唯一对应关系
topic_df = df[['句子', '话题']].drop_duplicates()
# 合并两张表
result_df = count_df.merge(topic_df, on='句子')
# 格式化输出
for _, row in result_df.iterrows():
    print(f"{row['句子']} {row['频次']} {row['话题']}")

两种方法均能得到符合要求的输出结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 08:45:24