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

Pandas:筛选DataFrame中指定列值计数与少数类相等的行

下采样至少数类数量实现类别平衡

方法一:分组采样(通用写法)

这种方法适用于Target包含多个类别的场景,自动将所有类别采样至少数类的样本数量:

import pandas as pd

# 获取少数类的样本数量
min_sample_count = df['Target'].value_counts().min()

# 按Target分组后对每个类别采样,少数类保留全部数据,多数类随机采样至目标数量
balanced_df = df.groupby('Target').apply(
    lambda group: group.sample(n=min_sample_count, random_state=42)
).reset_index(drop=True)

# 输出结果
print(balanced_df)
print(balanced_df['Target'].value_counts())

方法二:手动分离采样(直观写法)

如果只有两类数据,可手动分离后单独处理,逻辑更清晰:

# 分离Target为0和1的数据集
target_0 = df[df['Target'] == 0]
target_1 = df[df['Target'] == 1]

# 对多数类(Target=0)随机采样2个样本(与少数类数量一致)
target_0_sampled = target_0.sample(n=2, random_state=42)

# 合并采样后的多数类与全部少数类数据
balanced_df = pd.concat([target_0_sampled, target_1]).reset_index(drop=True)

# 输出结果
print(balanced_df)
print(balanced_df['Target'].value_counts())

补充说明

  • random_state=42用于固定随机采样结果,保证每次运行得到相同的样本集;若不需要固定结果,可直接删除该参数。
  • reset_index(drop=True)用于重置合并后DataFrame的索引,避免原索引混乱。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 23:45:42