热线电话:13121318867

登录
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.0000
1
关注作者
收藏
评论(0)

发表评论

暂无数据
推荐帖子