微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何随机选择一些pandas数据帧行?

我有一个包含列数的pandas数据帧df.对于许多行,金额为零.我想随机删除金额为零的50%的行,保留金额非零的所有行.我怎样才能做到这一点?

解决方法:

大熊猫

使用查询示例

df.drop(df.query('amount == 0').sample(frac=.5).index)

考虑数据帧df

df = pd.DataFrame(dict(amount=[0, 1] * 10))

df.drop(df.query('amount == 0').sample(frac=.5).index)

numpy的

iszero = df.amount.values == 0
count_zeros = iszero.sum()
idx = np.arange(iszero.shape[0])
keep_these = np.random.choice(idx[iszero], int(iszero.sum() * .5), replace=False)

df.iloc[np.sort(np.concatenate([idx[~iszero], keep_these]))]
    amount
1        1
2        0
3        1
5        1
6        0
7        1
8        0
9        1
10       0
11       1
12       0
13       1
15       1
17       1
19       1

时间测试

enter image description here

根据@tomcy的评论,您可以使用参数inplace = True从df中删除行而无需重新分配df

df.drop(df.query('amount == 0').sample(frac=.5).index, inplace=True)
df

    amount
1        1
2        0
3        1
5        1
6        0
7        1
8        0
9        1
10       0
11       1
12       0
13       1
15       1
17       1
19       1

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐