在熊猫数据框中,如何删除服从条件的行的随机子集?
换句话说,如果我有一个带有Label
列的Pandas数据框,我想删除Label == 1
行的50%(或其他百分比),但保留所有休息:
Label A -> Label A
0 1 0 1
0 2 0 2
0 3 0 3
1 10 1 11
1 11 1 12
1 12
1 13
我很想知道这样做的最简单,最pythonic / panda方式!
编辑:This question提供了部分答案,但仅涉及按索引删除行,而忽略行值。我仍然想知道如何仅从标记有特定方式的行中删除。
答案 0 :(得分:7)
使用frac
参数
df.sample(frac=.5)
如果您定义要放入变量n
n = .5
df.sample(frac=1 - n)
要包含条件,请使用drop
df.drop(df.query('Label == 1').sample(frac=.5).index)
Label A
0 0 1
1 0 2
2 0 3
4 1 11
6 1 13
答案 1 :(得分:3)
将 drop
与 sample
df.drop(df[df.Label.eq(1)].sample(2).index)
Label A
0 0 1
1 0 2
2 0 3
3 1 10
5 1 12