如何对DataFrame按条件抽样 使布尔型target列的0和1样本量近似均衡
实现方法
你可以先按target取值拆分数据集,对两类样本分别处理后再合并,具体代码如下:
步骤1:拆分正负样本
# 保留target=0的全部样本 df_target0 = df[df['target'] == 0] # 从target=1的样本中随机抽取6000条,random_state可固定随机种子保证结果可复现 df_target1 = df[df['target'] == 1].sample(n=6000, random_state=42)
步骤2:合并得到目标数据集
import pandas as pd new_df = pd.concat([df_target0, df_target1], axis=0)
如果需要打乱合并后的样本顺序,避免同类样本集中排布,可以增加打乱操作:
# frac=1代表抽取全部样本即打乱顺序,reset_index重置索引避免重复 new_df = new_df.sample(frac=1, random_state=42).reset_index(drop=True)
参数说明
n:指定抽样的样本数量,这里对应你需要的6000条target=1的样本random_state:随机种子参数,填写固定整数时每次运行抽样结果一致,不需要复现结果可以删除该参数reset_index(drop=True):重置合并后的数据集索引,避免出现重复的索引值,不需要保留原索引的情况下建议添加
内容的提问来源于stack exchange,提问作者pouchewar
相关产品推荐
相关产品推荐

