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

如何在Pandas中按用户名分组并统计指定处置码的出现次数

在Pandas中按用户分组统计处置码出现次数

嘿,这事儿用Pandas的几个常用函数就能轻松搞定,我给你两种实用方案,你可以根据自己的习惯选~

首先先构造你的原始测试数据,方便验证效果:

import pandas as pd

# 构造原始数据
data = {
    'User Name': ['person1', 'person2', 'person1', 'person2', 'person3'],
    'Disposition Code': ['Solved', 'Solved', 'Solved', 'Not Solved', 'Solved']
}
df = pd.DataFrame(data)

方法一:用pd.crosstab(最直接)

crosstab是Pandas专门用来生成交叉统计表格的函数,刚好匹配你的需求——按行(用户名)和列(处置码)统计频次:

# 生成交叉表,自动统计每个用户对应处置码的次数
result = pd.crosstab(df['User Name'], df['Disposition Code']).reset_index()

# 重命名列名,匹配你期望的格式
result.columns = ['User Name', 'Total Not Solved', 'Total Solved']

# 调整列的顺序,让Total Solved排在前面
result = result[['User Name', 'Total Solved', 'Total Not Solved']]

print(result)

运行后输出就是你要的结果:

User Name  Total Solved  Total Not Solved
0   person1             2                 0
1   person2             1                 1
2   person3             1                 0

方法二:用groupby + value_counts + unstack(更灵活)

如果需要更灵活的分组逻辑,这种组合方式也能实现:

# 按用户名分组,对处置码做值计数,再转成列格式(空值用0填充)
result = df.groupby('User Name')['Disposition Code'].value_counts().unstack(fill_value=0).reset_index()

# 重命名列并调整顺序
result.columns = ['User Name', 'Total Not Solved', 'Total Solved']
result = result[['User Name', 'Total Solved', 'Total Not Solved']]

print(result)

这个方法的好处是,如果后续需要扩展统计逻辑(比如加过滤条件),在groupby之后更容易调整。

补充说明

如果你的数据里处置码不止Solved和Not Solved两种,crosstab和unstack都会自动把所有不同的处置码转成对应的列,非常省心。要是你只想统计指定的两种,也可以手动指定列,比如在crosstab里加columns=['Solved', 'Not Solved']参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:55:19