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

如何从不平衡DataFrame中采样得到列值平衡的指定大小样本?

不平衡DataFrame的平衡抽样方案

针对你的需求——从100k条记录的不平衡DataFrame中抽取10k条平衡样本(claimed列1和2各5k条),可以用以下两种简洁的pandas实现方式:

方法一:分组抽样(推荐)

通过groupby结合sample,一次性完成分组抽取与合并:

import pandas as pd

# 设定每组需抽取的样本量(10k平衡样本,每组5000条)
per_group_size = 5000

# 按claimed分组,每组抽取指定数量样本,合并为平衡DataFrame
balanced_df = df.groupby('claimed', group_keys=False).apply(
    lambda group: group.sample(n=per_group_size, random_state=42)
)
  • group_keys=False避免将分组列作为索引的一部分,保持原DataFrame结构
  • random_state用于固定随机种子,确保抽样结果可复现,可按需移除

方法二:分步抽取(更直观)

先分别筛选两类数据,各自抽样后再合并打乱:

# 从claimed=1的样本中抽取5000条
sample_1 = df[df['claimed'] == 1].sample(n=5000, random_state=42)
# 从claimed=2的样本中抽取5000条
sample_2 = df[df['claimed'] == 2].sample(n=5000, random_state=42)

# 合并样本集并打乱顺序(避免数据按类别集中)
balanced_df = pd.concat([sample_1, sample_2]).sample(frac=1, random_state=42)
  • 最后一步的sample(frac=1)用于打乱合并后的数据,让两类样本随机分布

注意事项

如果某类样本数量不足所需抽取量(比如假设claimed=2只有4000条),可在sample中添加replace=True启用有放回抽样,但你的场景中claimed=2有20k条,完全满足无放回抽取5000条的需求,无需设置。

内容的提问来源于stack exchange,提问作者Patthebug

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 10:51:09