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

Python Pandas:统计各类别及跨两类的唯一用户数量

解决Pandas统计类别唯一用户数及跨类别重叠用户数的问题

没问题,我来帮你搞定这个需求!针对你的DataFrame,我们可以分两步实现你要的统计结果:

1. 统计每个类别下的唯一用户数

你之前用groupby().count()会把同一个用户的重复记录都算进去,而我们需要的是唯一用户数,所以应该用nunique()方法,它会自动去重统计不同的用户ID:

import pandas as pd

# 先创建你的示例DataFrame
data = {
    'user': [1,1,1,2,3,2],
    'category': ['A','B','A','B','B','B']
}
df = pd.DataFrame(data)

# 统计每个类别的唯一用户数
category_unique_users = df.groupby('category')['user'].nunique()
print(category_unique_users)

执行后会输出:

category
A    1
B    3
Name: user, dtype: int64

正好对应你要的A=1、B=3的结果。

2. 统计同时属于两个类别的唯一用户数

要找出同时在A和B类别里出现的用户,我们可以先按用户分组,拿到每个用户对应的所有类别,再筛选出同时包含A和B的用户:

方法一:通过分组后判断类别集合

# 按用户分组,获取每个用户的所有唯一类别
user_cats = df.groupby('user')['category'].unique()

# 筛选出同时包含A和B的用户,统计数量
both_count = user_cats.apply(lambda x: {'A', 'B'}.issubset(x)).sum()
print(f"A&B={both_count}")

方法二:用透视表转换格式后筛选

# 生成用户-类别的透视表,标记用户是否属于该类别
user_category_pivot = df.pivot_table(
    index='user', 
    columns='category', 
    aggfunc=lambda x: 1 if len(x)>0 else 0,
    fill_value=0
)

# 统计同时属于A和B的用户数
both_count = ((user_category_pivot['A'] == 1) & (user_category_pivot['B'] == 1)).sum()
print(f"A&B={both_count}")

两种方法都会输出A&B=1,符合你的预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:15:59