Pandas如何基于其他列值相等判断动态创建DataFrame布尔列
实现方法
pandas原生支持向量化列运算,不需要编写逐行循环就能快速实现需求,天然适配动态传入列名的场景,执行效率远高于apply等逐行遍历写法。
最简实现(固定列名场景)
直接对两列做相等逻辑判断,将判断结果赋值给新列即可,代码如下:
import pandas as pd # 构造示例DataFrame df = pd.DataFrame({"column_1":[1,2,3,4,5], "column_2":[1,3,2,4,5]}) # 新增布尔列判断两列值是否相等 df["columns_equal"] = df["column_1"] == df["column_2"]
执行后输出结果和预期完全一致:
column_1 column_2 columns_equal 0 1 1 True 1 2 3 False 2 3 2 False 3 4 4 True 4 5 5 True
动态传列名场景
如果需要比较的列名不是固定写死,而是通过变量动态传入,直接用列名变量索引列做判断即可,不需要修改核心逻辑:
# 动态指定要比较的列名、生成的新列名 compare_col1 = "column_1" compare_col2 = "column_2" new_col_name = "columns_equal" df[new_col_name] = df[compare_col1] == df[compare_col2]
空值兼容说明
如果参与比较的列中存在NaN空值,原生==逻辑会判定两个NaN不相等,如果需要将「两列同时为空」的场景也判定为相等,可以用如下写法:
df[new_col_name] = (df[compare_col1] == df[compare_col2]) | (df[compare_col1].isna() & df[compare_col2].isna())
内容的提问来源于stack exchange,提问作者joant95
相关产品推荐
相关产品推荐

