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

Pandas实现分组值计数(按ID去重统计标签数量)

简洁实现:统计各Label对应的唯一ID数量

嘿,针对你的需求,我整理了几个超简洁的Pandas实现方案,比复杂的自定义逻辑要直观得多!

首先先确认你的数据集:

import pandas as pd
r = pd.DataFrame({ 
    'id': [1, 1, 2, 2, 3], 
    'value': [4.0, 5.5, 6.0, 4.0, 5], 
    'label': ["A", "A", "B", "B", "A"], 
})

你的核心需求是:每个Label对应的不重复ID数量(同一ID在同一Label下只计一次),最终输出字典格式{"A": 2, "B": 1}。下面是几个简便的实现方案:

方案1:最直观的分组统计(推荐)

这是语义最清晰的写法,一步到位:

result = r.groupby('label')['id'].nunique().to_dict()
print(result)
# 输出: {'A': 2, 'B': 1}
  • 逻辑:先按label分组,对每组的id列统计唯一值的数量,最后转成字典格式,完美匹配需求。

方案2:先去重再计数

如果习惯先处理重复数据再统计,这个写法也很简洁:

result = r[['label', 'id']].drop_duplicates()['label'].value_counts().to_dict()
print(result)
# 输出: {'A': 2, 'B': 1}
  • 逻辑:先提取label和id列,去掉重复的(Label+ID)组合,再统计每个Label的出现次数,最后转字典。

方案3:链式调用的去重计数

和方案2逻辑一致,但写法更紧凑,可读性也不错:

result = r.drop_duplicates(subset=['label', 'id'])['label'].value_counts().to_dict()
  • 这里明确指定subset=['label', 'id'],让去重的逻辑一目了然。

总结

如果追求代码的可读性和语义清晰,方案1是最优选择;如果习惯先清理重复数据再统计,方案2/3也很合适。这几个方法都比循环或者自定义函数要简便得多~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:06:44