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写这个?
使用groupby和head:
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),则此方法将不起作用。