猿问

使 DataFrame 相对于特定列平衡

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


  Text  Label

0  abc      0

1  def      1

2  ghi      1

3   .       .

4   .       .

5   .       .

有 100 行标签为“1”,只有 50 行标签为“0”。我想要一个平衡的集合,以便有标签为“0”的 50 行和标签为“1”的 50 行。哪些带有标签“1”的行被丢弃并不重要。


有没有什么简洁的方法可以用 Python 写这个?


神不在的星期二
浏览 149回答 2
2回答

Cats萌萌

使用groupby和head: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) 个,这将不起作用。
随时随地看视频慕课网APP

相关分类

Python
我要回答