如何从含二类标签的112k行大型数据集中抽取10k行均衡样本
均衡抽取10k行样本的实现方案
这事儿太好办了!用Python的pandas库就能快速实现这种均衡抽样需求,我给你拆解成清晰的步骤和可直接用的代码示例:
核心思路
先把原始数据按目标列(就是那个取值为1/0的列)分成两组,再从每组里各抽5k行,最后合并成均衡的10k行样本——完美保持1:1的分布比例。
具体步骤(以Python pandas为例)
- 首先导入必备的pandas库:
import pandas as pd - 读取你的原始数据集(替换成你实际的文件路径和格式,比如excel就用
pd.read_excel):# 示例:读取csv格式的原始数据 df = pd.read_csv("your_raw_dataset.csv") - 按目标列拆分数据(这里假设目标列名为
is_true,一定要替换成你数据集里的实际列名):# 筛选出取值为1的所有行 df_true = df[df['is_true'] == 1] # 筛选出取值为0的所有行 df_false = df[df['is_true'] == 0] - 从每组随机抽取5000行(
random_state用来固定抽样结果,保证每次跑代码都得到一样的样本,可选参数):sample_true = df_true.sample(n=5000, random_state=42) sample_false = df_false.sample(n=5000, random_state=42) - 合并两个抽样子集,还可以打乱顺序避免出现“先全1再全0”的分组痕迹:
# 合并两个抽样样本 balanced_sample = pd.concat([sample_true, sample_false]) # 打乱行顺序并重置索引 balanced_sample = balanced_sample.sample(frac=1, random_state=42).reset_index(drop=True) - 最后把均衡抽样后的数据集保存下来:
# 保存为csv,也可以换成你需要的格式 balanced_sample.to_csv("balanced_10k_sample.csv", index=False)
额外小提示
- 如果你的数据集不用pandas处理(比如用numpy),思路完全一致:先拆分两组,再分别随机选取索引抽样,最后合并即可。
random_state可以换成任意整数,或者直接去掉——去掉的话每次运行代码会得到不同的抽样结果,按需选择就行。- 要是原始数据里的目标列值不是1/0而是True/False,把代码里的
==1换成==True,==0换成==False就ok啦!
内容的提问来源于stack exchange,提问作者merchmallow
相关产品推荐
相关产品推荐

