首页 > 解决方案 > 数据帧中的平衡行样本与给定分类目标列的熊猫

问题描述

给定一个数据框,我的目标是对行进行采样,以使一列中的值尽可能平衡。假设我在下面有一个数据框,样本大小是3,目标列是c

a | b | c

1 | 2 | 0
3 | 4 | 0
5 | 6 | 1
7 | 8 | 2
9 | 10| 2
11| 12| 2

可能的样本之一是

a | b | c

1 | 2 | 0
5 | 6 | 1
7 | 8 | 2

如果样本量不是唯一类数量的倍数,则可以有 1 个左右的差异。

我将如何在熊猫中解决这个问题?

编辑:提供了对我有用的解决方案

标签: pythonpandas

解决方案


我首先为 c 列的每个唯一值生成样本大小,以使其平衡。其余部分分布在前几个元素上

unique_values = df['c'].unique()
sample_sizes = [(k//len(df.columns))] * len(unique_values)
i = 0
while i < k%len(df.columns):
    sample_sizes[i]+= 1
    i= I+1

该位根据生成的样本大小生成样本

df2= pd.concat([df.loc[df['c']  == unique_values[i]].sample() for i in range(len(sample_sizes)) for j in range(sample_sizes[i])])

推荐阅读