You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何处理DataFrame重复ID:低计数全保留,高计数随机抽100行?

Pandas实现用户数据的分层抽样

针对你的需求,用Pandas可以通过以下步骤完成数据子集化:

  1. 先计算每个user_id的出现次数:
import pandas as pd

# 假设你的原始数据存储在df中
user_counts = df['user_id'].value_counts()
  1. 拆分并处理两类用户数据:
  • 低频次用户(出现次数≤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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 17:09:26