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

如何在Pandas中按唯一user_id统计各部门独立用户数?

解决按唯一user_id统计宠物用品购买用户的方法

核心思路

要区分订单数和唯一用户数,关键是先按user_id聚合,判断每个用户是否存在宠物用品购买记录,再做统计。

高效解决方案(适配大型数据集)

针对3200万条记录的大数据集,推荐用分组聚合的方式直接标记用户属性,避免内存浪费:

# 按user_id分组,判断该用户是否有过宠物用品订单
user_pet_status = df.groupby('user_id')['department'].apply(
    lambda x: 'Yes' if (x == 'pets').any() else 'No'
).reset_index(name='pet_owner')

# 统计购买/未购买宠物用品的唯一用户数量
user_pet_status['pet_owner'].value_counts(dropna=False)

这个方法直接在分组时完成判断,不需要额外创建大集合,性能更优。

分步实现(适合理解逻辑)

  1. 提取买过宠物用品的唯一用户ID
# 保留Pandas Series/numpy数组格式,不要转成list
pet_user_ids = df[df['department'] == 'pets']['user_id'].unique()
  1. 给每个用户标记宠物主人属性
# 对每个user_id判断是否在宠物用户集合中
df['pet_owner'] = df['user_id'].map(lambda x: 'Yes' if x in pet_user_ids else 'No')

# 提取唯一用户的属性记录(去掉重复的订单行)
user_pet_status = df[['user_id', 'pet_owner']].drop_duplicates()
  1. 统计用户数量
user_pet_status['pet_owner'].value_counts(dropna=False)

之前错误的原因说明

  • 把unique()结果转成list后,list没有value_counts方法,直接用len(pet_user_ids)就能得到购买宠物用品的唯一用户数;
  • groupby('user_id').agg({'pet_owner' : 'count'})统计的是每个用户的订单行数,而非是否存在宠物用品购买行为,应该用any()判断属性是否存在。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 01:32:10