如何处理DataFrame重复ID:低计数全保留,高计数随机抽100行?
Pandas实现用户数据的分层抽样
针对你的需求,用Pandas可以通过以下步骤完成数据子集化:
- 先计算每个
user_id的出现次数:
import pandas as pd # 假设你的原始数据存储在df中 user_counts = df['user_id'].value_counts()
- 拆分并处理两类用户数据:
- 低频次用户(出现次数≤100):直接保留所有行
- 高频次用户(出现次数>100):对每个用户随机抽取100行
代码实现:
# 保留低频次用户的全部数据 small_users_subset = df[df['user_id'].isin(user_counts[user_counts <= 100].index)] # 对高频次用户按ID分组,每组随机抽100行 large_users_subset = df[df['user_id'].isin(user_counts[user_counts > 100].index)] \ .groupby('user_id') \ .sample(n=100, random_state=42) # random_state用于固定抽样结果,可根据需求移除 # 合并两个子集得到最终结果 final_subset = pd.concat([small_users_subset, large_users_subset], ignore_index=True)
补充说明
random_state=42参数是为了让抽样结果可复现,如果不需要固定结果可以去掉这个参数- 若某个用户的出现次数恰好等于100,会被归类到低频次用户组,保留全部数据
内容的提问来源于stack exchange,提问作者Stuck
相关产品推荐
相关产品推荐

