You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何删除Pandas DataFrame指定多列中含负值的行?

移除DataFrame指定列含负值的行

问题背景

初始DataFrame定义如下:

import pandas as pd
ad = pd.DataFrame({'A':[-1,2,3,4],'B':[5,-6,7,8],'C':[1,-2,0,1]})

输出结果:

A   B   C
0  -1   5   1
1   2  -6  -2
2   3   7   0
3   4   8  -1

需求:删除A、B列中任意一列存在负值的行,预期结果:

A   B   C
2   3   7   0
3   4   8  -1

初始尝试的问题

最初的写法会导致错误结果:

ad = ad[ad[['A','B']]>0]

执行后生成的DataFrame会把不符合条件的单元格设为NaN:

A    B   C
0  NaN  5.0 NaN
1  2.0  NaN NaN
2  3.0  7.0 NaN
3  4.0  8.0 NaN

后续执行ad.dropna(how='any',inplace=True)时,只要行内有任意NaN就会被删除,最终得到空DataFrame。

可行解决方案

方案1:Pandas原生方法(all())

利用Pandas的布尔索引结合all()方法,确保指定列的所有值都满足大于0的条件:

print(ad[(ad[['A','B']] > 0).all(1)])

输出符合预期:

A  B  C
2  3  7  0
3  4  8  1

性能测试(%timeit):

1000 loops, best of 5: 979 µs per loop

方案2:基于NumPy的实现

通过np.logical_and.reduce()实现多列条件的逻辑与判断:

import numpy as np
print(ad[np.logical_and.reduce(ad[['A','B']]>0,axis=1)])

输出同样符合预期:

A  B  C
2  3  7  0
3  4  8  1

性能测试(%timeit):

1000 loops, best of 5: 795 µs per loop

内容的提问来源于stack exchange,提问作者Mainland

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 11:15:32