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

基于r_no按用户与value聚合唯一cam_id的数值统计需求

高效处理百万级Pandas数据:基于r_no统计唯一cam_id聚合结果

嘿,我来帮你搞定这个百万级数据的统计需求!首先咱们先明确你的场景:你有一个百万行的DataFrame,需要基于r_no,统计同一value下用户打开的唯一cam_id的聚合结果,之前用groupby时觉得复杂度上升,对吧?

先看你的示例数据:

import pandas as pd

df = pd.DataFrame()
df['r_no'] = [1,1,1,2,3,1,1,1,2]
df['user'] = ['sam','sam','sam','sam','peter','jack','jack','Kris','peter']
df['value'] = [76,76,7,8,8,2,29,2,8]
df['cam_id'] = ['ab','abc','ab','ab','ab','abcd','abcd','abcd','ab']

针对百万级数据,咱们必须用Pandas内置的矢量化聚合操作,避免自定义apply(因为apply会逐组跑Python代码,速度慢很多)。下面分两种常见需求给你解决方案:

需求1:统计每个(r_no, value)组下,各用户唯一cam_id的数量之和

也就是先算每个用户在该r_no+value下打开过多少种唯一的cam_id,再把这些数加起来,得到该r_no+value的总计数:

# 第一步:按r_no、value、user分组,计算每个用户的唯一cam_id数量
user_level_unique = df.groupby(['r_no', 'value', 'user'])['cam_id'].nunique()

# 第二步:按r_no、value聚合,求和得到总数
final_result = user_level_unique.groupby(['r_no', 'value']).sum()

运行后,示例数据的结果会是:

r_no  value
1     2        2
      7        1
      29       1
      76       2
2     8        2
3     8        1
Name: cam_id, dtype: int64

需求2:统计每个(r_no, value)组下,所有用户打开过的唯一cam_id总个数(跨用户去重)

也就是不管哪个用户,只要是该r_no+value下出现过的cam_id,只算一次:

final_result = df.groupby(['r_no', 'value'])['cam_id'].nunique()

示例数据的结果是:

r_no  value
1     2        1
      7        1
      29       1
      76       2
2     8        1
3     8        1
Name: cam_id, dtype: int64

扩展:多指标聚合

如果需要同时统计多个指标(比如唯一cam数、不同用户数、总记录数),可以用agg方法,同样高效:

final_result = df.groupby(['r_no', 'value']).agg(
    唯一cam数量=('cam_id', 'nunique'),
    不同用户数=('user', 'nunique'),
    总记录数=('cam_id', 'count')
)

这些方法都是Pandas底层优化过的C语言实现,处理百万行数据完全没问题,比自定义函数快几个数量级哦!

内容的提问来源于stack exchange,提问作者Nandha Kumar M

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:44:34