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

如何使用pandas的value_counts统计多列组合及分组服务数?

嘿,我懂你现在的需求——之前用value_counts统计单列ID的数量很顺手,但现在想升级到每个ID对应的服务数量统计,对吧?我结合你的示例数据给你几种实用的解决方案,分两种常见场景来说明~

首先先把你的示例数据代码放出来,方便后续演示:

import pandas as pd
d = {'id': [1, 1, 2, 3, 3], 'service': [3, 3, 4, 2, 3], 'name': ['Joe', 'Joe', 'Bob', 'Val', 'Val']}
df = pd.DataFrame(data=d)

场景1:统计每个ID对应的服务条目总数

如果你的需求是统计每个ID下一共有多少条服务记录(比如ID=1有2条服务记录),可以用groupby搭配size或者count:

# 方法1:得到Series格式的统计结果
id_service_total = df.groupby('id')['service'].size()

# 方法2:转成带列名的DataFrame,更直观
id_service_total_df = df.groupby('id')['service'].size().reset_index(name='service_total_count')

运行后id_service_total_df的结果是:

idservice_total_count
12
21
32

场景2:统计每个ID对应的唯一服务数量

如果你的需求是统计每个ID下有多少种不同的服务(比如ID=3有2种不同的服务:2和3),就用groupby搭配nunique:

# 得到带列名的DataFrame结果
id_unique_service_df = df.groupby('id')['service'].nunique().reset_index(name='unique_service_count')

运行后id_unique_service_df的结果是:

idunique_service_count
11
21
32

把统计结果合并回原DataFrame

如果你想给原表格的每一行都添加上对应ID的服务统计数据,可以用transform方法,它会把分组统计的结果广播到每一行:

# 添加每个ID的服务条目总数列
df['service_total_per_id'] = df.groupby('id')['service'].transform('size')

# 添加每个ID的唯一服务数量列
df['unique_service_per_id'] = df.groupby('id')['service'].transform('nunique')

处理后的df会变成这样:

idservicenameservice_total_per_idunique_service_per_id
13Joe21
13Joe21
24Bob11
32Val22
33Val22

简单说下区别:size是统计分组后的总行数,count是统计分组内非空值的数量(你的数据没有空值,所以两者结果一致);nunique则是统计分组内唯一值的数量,按需选用就好~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:22:09