Pandas:筛选收听独特艺术家数量达标的用户
修正你的用户筛选代码,精准获取独特艺术家达标的用户
我看了你的需求和初始代码,发现两个关键问题需要调整,才能准确筛选出收听独特艺术家数量达到最小值的用户:
- 列名不匹配:你的数据里用户列是
user,但代码里写的是users,这会直接导致报错; - 统计逻辑错误:
len(x)统计的是该用户的所有播放记录条数,而非去重后的艺术家数量,这会让筛选结果完全偏离你的目标。
下面是两种符合需求的实现方案:
方案1:先统计再筛选(直观易维护)
这种方法先单独计算每个用户的独特艺术家数量,方便你后续查看或调整阈值,再提取目标用户的全部记录:
# 第一步:计算每个用户的独特艺术家数量 user_artist_stats = full_df.groupby('user')['artist'].nunique().reset_index(name='unique_artist_count') # 第二步:筛选出独特艺术家数≥20的用户列表 target_users = user_artist_stats[user_artist_stats['unique_artist_count'] >= 20]['user'] # 第三步:从原数据中提取这些用户的所有播放记录 eda_df = full_df[full_df['user'].isin(target_users)]
方案2:用filter方法直接筛选(简洁版)
如果你习惯用groupby.filter的写法,只需要把统计逻辑改成nunique(),同时修正列名即可:
# 修正列名,并使用nunique()统计独特艺术家数量 eda_df = full_df.groupby('user')['artist'].filter(lambda x: x.nunique() >= 20)
小提示
用你提供的样例数据测试的话,比如把阈值改成2,用户a会被保留(因为他有2个独特艺术家),完全符合你的筛选逻辑。
内容的提问来源于stack exchange,提问作者Mr. Jibz
相关产品推荐
相关产品推荐

