如何根据条件表达式删除一定数量的行?

时间:2019-03-11 09:37:07

标签: python pandas keras

我有“数据不平衡”的问题。二进制分类中有99%的是和1%的否。在这里,我想删除某些行以表明yes = 1,以平衡数据比例。但是由于我对python的了解并不深,所以我只能删除指示条件的整个行。 谁能为我的数据框建议语法,比如说“仅删除yes = 1的10000行”?

谢谢。

最诚挚的问候

1 个答案:

答案 0 :(得分:3)

您可以选择顶部索引值,并DataFrame.drop

np.random.seed(2019)
N = 20
df = pd.DataFrame({'a':np.random.choice([0,1], N)})

#remove top 5 values matched condition
M = 5
idx = df.index.values[df['a'] == 1][:M]

df = df.drop(idx)
print (df)
    a
0   0
1   0
4   0
5   0
6   0
7   0
10  0
11  0
12  0
13  0
15  0
16  1
17  1
18  0
19  0

另一种解决方案是通过Series.cumsum创建掩码,使用~通过反掩码链接,并通过boolean indexing进行过滤:

M = 5
mask = (df['a'] == 1)
df = df[(mask.cumsum() > M) | ~mask]
print (df)
    a
0   0
1   0
4   0
5   0
6   0
7   0
10  0
11  0
12  0
13  0
15  0
16  1
17  1
18  0
19  0