2019-03-11
阅读量:
718
如何根据条件表达式删除一定数量的行?
我有'不平衡的数据'问题。二进制分类中有99%的是和1%的否。在这里,我想删除指示yes = 1的特定行数来平衡数据比例。但由于我不深入python,我只能删除指示条件的整行。任何人都可以建议语法让我们说'从我的数据框中只删除10000行是yes = 1'?
解决办法:可以选择最高索引值和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






评论(0)


暂无数据
推荐帖子
0条评论
0条评论
0条评论