Python Pandas如何筛选DataFrame同一行第一列值小于第二列值的行
Pandas 筛选同行列值满足「first-column 数值 < second-column 数值」的行
这类逐行对比两列数值的筛选场景,直接用Pandas原生布尔索引即可实现,全程为向量化运算,不需要手写循环,执行效率最高。
首先修正示例里的列名笔误:你提供的原始数据集里first- column列名带了多余空格,和输出样例的first-column格式不匹配,实际使用时要先保证列名和对比逻辑一致,否则会触发列不存在的报错。
实现步骤
1. 构造/读取目标DataFrame
import pandas as pd # 对齐你提供的数据集内容 df = pd.DataFrame({ "id": [0, 1, 2, 3, 4, 5, 6, 7], "first-column": [2, 1, 3, 7, 0, 9, 1, 7], "second-column": [1, 9, 5, 2, 1, 3, 5, 2] })
如果你的原始数据集确实存在列名格式偏差的问题,可以用一行代码批量修正列名:
# 去掉列名中连字符后的多余空格,统一列名格式 df.columns = df.columns.str.replace('- ', '-')
2. 执行行筛选
直接将逐行对比的判断表达式作为行索引传入DataFrame,即可提取所有符合条件的行:
# 核心筛选逻辑:逐行判断first-column值小于second-column值 filtered_df = df[df["first-column"] < df["second-column"]]
注意:按照你提供的数据集数值逐行校验,实际符合筛选规则的行共4条,分别对应id为1、2、4、6的记录,你给出的输出样例存在数值遗漏。如果需要严格匹配你写的单条输出,可在筛选逻辑中追加id条件:
# 仅保留id=1且满足列值对比规则的行 filtered_df = df[(df["first-column"] < df["second-column"]) & (df["id"] == 1)]
注意事项
- 参与对比的两列必须是可比较的数值类型,如果列值为字符串格式的数字,需要先用
pd.to_numeric()做类型转换,否则会出现对比逻辑异常 - 多条件组合判断时,每个独立条件需要用括号包裹,条件之间用
&(逻辑与)、|(逻辑或)连接,不能直接用Python原生的and/or连接,否则会触发报错
内容的提问来源于stack exchange,提问作者study material
相关产品推荐
相关产品推荐

