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

rye*_*kos 3 python dataframe pandas

我有一个 Python 数据帧,如下所示。

  Text  Label
0  abc      0
1  def      1
2  ghi      1
3   .       .
4   .       .
5   .       .
Run Code Online (Sandbox Code Playgroud)

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

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

cs9*_*s95 7

使用groupbyhead

df = df.groupby('Label').head(50)
Run Code Online (Sandbox Code Playgroud)

这将从每个行子集中获取前 50 个行,其中 Label 分别为 0 和 1。对于标签为 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))
Run Code Online (Sandbox Code Playgroud)

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