如何按user_id出现频率降序排序DataFrame并去除重复值?
解决方案
嘿,这就帮你实现按user_id出现频率降序排列并去重的需求!下面是两种简洁可行的方法:
方法一:分步实现(逻辑清晰)
先统计频次、确定排序规则,再筛选去重并重新排列:
import pandas as pd # 第一步:统计每个user_id的出现次数,结果默认按降序排列 user_freq = df['user_id'].value_counts() # 第二步:提取按频率降序排列的user_id列表 sorted_user_ids = user_freq.index.tolist() # 第三步:筛选目标user_id、去重保留第一条记录,最后按频率顺序重排 result_df = ( df[df['user_id'].isin(sorted_user_ids)] .drop_duplicates(subset='user_id', keep='first') .set_index('user_id') .reindex(sorted_user_ids) .reset_index() )
方法二:极简写法(一步到位)
利用groupby和value_counts的索引特性,直接完成分组+排序:
import pandas as pd # 按user_id分组取第一条记录,再按出现频率降序排列 result_df = df.groupby('user_id').first().loc[df['user_id'].value_counts().index].reset_index()
效果说明
两种方法都会达成你想要的结果:
- 每个
user_id仅保留一条记录(取该用户首次出现的o_date和month值) - DataFrame整体按
user_id的出现频率从高到低排列,和Series.value_counts()的顺序完全匹配
内容的提问来源于stack exchange,提问作者th000
相关产品推荐
相关产品推荐

