Python中如何基于列条件统计同时关注A、C、D的用户数?
同时关注A/C/D三位明星的用户数统计实现方法
我们可以基于pandas完成数据处理,核心思路是锁定同时出现在三位明星关注列表中的用户ID,最终统计匹配的用户数量,完全匹配题目预期输出1的结果。
前置准备:构造匹配题目结构的测试数据
首先导入pandas库,按照题目给出的表格结构构造原始数据集:
import pandas as pd # 原始数据集结构和题目完全一致 df = pd.DataFrame({ "Celebrity": ["A", "A", "B", "C", "D", "A"], "Usernames": [2, 1, 3, 2, 2, 3] })
两种可落地的实现方案
方案一:集合交叉匹配(逻辑最直观)
集合运算的核心是找到同时属于三个集合的元素
- 分别提取关注了A、C、D的用户ID集合
- 对三个用户集合取交集,交集中的元素就是同时关注三位明星的用户
- 统计交集的长度即为所求结果
# 分别提取每个明星对应的关注用户集合 follow_A = set(df.loc[df["Celebrity"] == "A", "Usernames"]) follow_C = set(df.loc[df["Celebrity"] == "C", "Usernames"]) follow_D = set(df.loc[df["Celebrity"] == "D", "Usernames"]) # 三集合取交集,计算交集元素数量 total = len(follow_A & follow_C & follow_D) print(total) # 输出结果为1,和预期一致
方案二:分组聚合筛选(扩展性更强)
- 按用户ID分组,聚合每个用户关注过的所有明星为一个集合
- 逐行判断每个用户的关注集合是否包含全部目标明星
- 统计满足判断条件的用户总数
# 定义需要同时覆盖的目标明星集合 target = {"A", "C", "D"} # 按用户名分组,聚合每个用户的关注明星集合 user_follow_info = df.groupby("Usernames")["Celebrity"].apply(set) # 判断每个用户的关注集合是否覆盖全部目标明星,统计满足条件的总数 total = user_follow_info.apply(lambda follow_set: target.issubset(follow_set)).sum() print(total) # 输出结果为1,和预期一致
方案选型说明
- 集合交叉法逻辑简单易懂,小数据量下运行效率更高,适合单次统计少量目标组合的场景
- 分组聚合法可以直接对全量用户的关注关系遍历一次完成多组目标的匹配,适合需要批量统计多组明星组合关注用户的场景
内容的提问来源于stack exchange,提问作者Jinhang Jiang
相关产品推荐
相关产品推荐

