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

使用imblearn随机欠采样平衡数据框后,如何保存被移除的样本至新数据框?

如何保存随机欠采样中被移除的数据?

嘿,这个需求其实很好实现,RandomUnderSampler自带了一个实用参数能帮咱们拿到被保留样本的索引,反向操作就能提取出被欠采样掉的数据啦,我给你一步步拆解:

首先,你需要在初始化RandomUnderSampler时加上return_indices=True参数,这样调用fit_resample时会额外返回一个被保留样本的索引数组。接着用原数据的索引集合减去这个保留索引的集合,就能得到被移除的样本索引,最后用这些索引从原数据里把对应行取出来就行。

下面是修改后的完整代码:

import pandas as pd
from imblearn.under_sampling import RandomUnderSampler

# 初始化采样器,添加return_indices=True参数以获取保留样本的索引
rus = RandomUnderSampler(sampling_strategy=1, return_indices=True)
# 此时fit_resample会返回三个值:平衡后的X、平衡后的y、被保留样本的索引
X_res, y_res, retained_indices = rus.fit_resample(X, y)

# 生成你原本需要的平衡数据集
df1 = pd.concat([X_res, y_res], axis=1)

# 计算被移除样本的索引:原数据索引集合减去保留索引集合
original_indices = set(X.index)
removed_indices = original_indices - set(retained_indices)

# 从原数据中提取被移除的行,组成新的DataFrame
removed_df = pd.concat([X.loc[removed_indices], y.loc[removed_indices]], axis=1)

这里补充两个小细节:

  • 如果你的原数据一开始就是一个完整的DataFrame(而非拆分的X和y),那直接用原DataFrame.loc[removed_indices]提取会更简洁
  • 用集合操作计算被移除索引是为了兼容非连续的索引场景,避免因索引不连续导致的提取错误

内容的提问来源于stack exchange,提问作者Avi1-x

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 04:33:16