如何按用户分组,删除唯一目的地不足5个的DataFrame行?
解决Pandas筛选用户行的问题
你之前的df.drop()用法错误,因为groupby返回的布尔Series索引是user_id,和原DataFrame的行索引不匹配,导致无法正确删除行。下面是两种可行的解决方法:
方法一:先筛选有效用户再过滤
- 先算出每个用户去过的不同目的地数量,提取出数量≥5的用户ID:
valid_users = df.groupby('user_id')['hotel_country'].nunique()[lambda x: x >= 5].index
- 用这些用户ID过滤原DataFrame,只保留符合条件的行:
filtered_df = df[df['user_id'].isin(valid_users)]
方法二:用transform一步完成
利用transform方法把groupby的计算结果映射到每一行,直接通过布尔索引筛选:
filtered_df = df[df.groupby('user_id')['hotel_country'].transform('nunique') >= 5]
transform会将每个用户的唯一目的地数量,对应填充到该用户的每一行数据中,这样就能直接判断每一行是否属于符合条件的用户,进而完成筛选。
内容的提问来源于stack exchange,提问作者anonymous
相关产品推荐
相关产品推荐

