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
相关产品推荐
相关产品推荐

