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

先感谢您。

最好的祝福,

最佳答案

您可以选择顶部索引值并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

关于python - 如何根据条件表达式删除一定数量的行?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55098872/

10-16 07:34
查看更多