Python 如何根据条件删除数据帧中特定数量的随机行?

Python 如何根据条件删除数据帧中特定数量的随机行?,python,pandas,Python,Pandas,我想从数据帧中删除特定数量的“n”行,其中要删除的行是随机选择的。此外,它必须根据特定列值的条件选择行 例如,我的数据帧如下所示: C1 C2 C3 1 0 a 2 1 b 3 0 c 4 0 d 5 0 e 6 1 f 7 1 g 8 1 h 9 0 i C1 C2 C3 1 0 a 3 0 c

我想从数据帧中删除特定数量的“n”行,其中要删除的行是随机选择的。此外,它必须根据特定列值的条件选择行

例如,我的数据帧如下所示:

C1    C2    C3
1     0     a
2     1     b
3     0     c
4     0     d
5     0     e
6     1     f
7     1     g
8     1     h
9     0     i
C1    C2    C3
1     0     a
3     0     c
4     0     d
5     0     e
6     1     f
8     1     h
9     0     i
现在,我想随机删除
n=2
行,其条件是
C2==1

生成的帧可以如下所示:

C1    C2    C3
1     0     a
2     1     b
3     0     c
4     0     d
5     0     e
6     1     f
7     1     g
8     1     h
9     0     i
C1    C2    C3
1     0     a
3     0     c
4     0     d
5     0     e
6     1     f
8     1     h
9     0     i

或者可能还有其他的可能性。 问题dows显示随机删除“n”个句子,但不包括提供条件。

按筛选行,对于随机行,上次使用
删除

N = 2
df1 = df.drop(df[df['C2'].eq(1)].sample(N).index)
print (df1)
   C1  C2 C3
0   1   0  a
1   2   1  b
2   3   0  c
3   4   0  d
4   5   0  e
6   7   1  g
8   9   0  i
或者使用
np.random.choice
获取随机索引值:

df = df.drop(np.random.choice(df.index[df['C2'].eq(1)], N))

两种方法都试过了,
df1=df.drop(df[df['C2'].eq(1)]。sample(N.index)
效果很好。但是
df=df.drop(np.random.choice(df.index[df['C2'].eq(1)],N))
没有。你能解释更多吗?我总共有89609列,其中一列的值是0和1。我的想法是减少数据的取样。C2==0的行数为73462,C2==1的行数为16147。我尝试随机删除(73462-16147)=>57315行,其中C2==0。当使用
df1=df.drop(df[df['C2'].eq(1)].sample(N).index)
时,我得到了32294行,这正是我想要的,数据看起来很好。但是通过
df.drop(np.random.choice(df.index[df['C2'].eq(1)],N))
,我得到了49667行。无论如何,我已经对你的答案投了赞成票。只要给出答案的第一部分,我也会接受。