从pandas数据帧中"删除随机行"

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的做法!


编辑:这个问题提供了答案的一部分,但它只讨论了按索引删除行,忽略行值.我仍然想知道如何只从标记为某种方式的行中删除.

piR*_*red 8

使用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)


use*_*203 5

使用dropsample

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)