我在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编写此代码的简洁方法?
答案 0 :(得分:2)
使用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),则此方法将无效。
答案 1 :(得分:0)
您应该能够使用head:
DataFrame.head(50)
https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.head.html#