使DataFrame相对于特定列保持平衡

时间:2018-10-22 18:10:04

标签: python pandas dataframe

我在Python中有一个DataFrame,如下所示。

  Text  Label
0  abc      0
1  def      1
2  ghi      1
3   .       .
4   .       .
5   .       .

有100行带有标签“ 1”,只有50行带有标签“ 0”。我想要一个平衡的集合,以便有50行带有标签“ 0”和50行带有标签“ 1”。扔掉标记为“ 1”的行并不重要。

是否有使用Python编写此代码的简洁方法?

2 个答案:

答案 0 :(得分:2)

使用groupbyhead

df = df.groupby('Label').head(50)

这将从Label分别为0和1的行的每个子集中获取前50个。对于带有标签1的行,将拾取前50个,其余的将被丢弃。

要选择最后50个,请用head(50)替换tail(50)

要随机选择50行,请使用apply + sample

df = (df.groupby('Label', as_index=False)
        .apply(lambda x: x.sample(n=50))
        .reset_index(drop=True))

请注意,如果任何组的项目少于N(= 50),则此方法将无效。

答案 1 :(得分:0)