NcA*_*ams 3 python dataframe pandas
在pandas数据帧中,如何删除服从条件的行的随机子集?
换句话说,如果我有一个带有Label列的Pandas数据帧,我想在其中删除50%(或其他一些百分比)的行Label == 1,但保留所有其余的:
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
Run Code Online (Sandbox Code Playgroud)
我想知道最简单,最pythonic/panda-ish的做法!
编辑:这个问题提供了答案的一部分,但它只讨论了按索引删除行,忽略行值.我仍然想知道如何只从标记为某种方式的行中删除.
使用frac参数
df.sample(frac=.5)
Run Code Online (Sandbox Code Playgroud)
如果您定义要放入变量的金额 n
n = .5
df.sample(frac=1 - n)
Run Code Online (Sandbox Code Playgroud)
要包括条件,请使用 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
Run Code Online (Sandbox Code Playgroud)
使用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
Run Code Online (Sandbox Code Playgroud)