根据特定列使数据框平衡

3
我有一个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个回答

6

使用groupbyhead

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

这将从标签为0和1的每个子集中各取前50行。对于标签为1的行,将选择前50行,并丢弃其余行。

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

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

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

请注意,如果任何一个组的项少于N(=50),则此方法将无法正常工作。

我本来想用.sample提供一个解决方案,但这个更加简洁。 - wbadart

-1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接