如何在pandas中用XOR运算符比较两个二进制字符串列并输出到新列
实现方案
你不需要提前把数值转成二进制字符串再做XOR运算,pandas支持直接对整数列执行逐元素位异或操作,比循环写法效率高很多,两种可行实现如下:
方案1:向量化运算(推荐,性能最优)
一行代码即可完成整列的异或计算:
# 直接对两列整数值执行逐元素XOR运算,结果为十进制整数 output["Delta (Pos. Difference)"] = output["Settings 1 Values"].astype(int) ^ output["Settings 2 Values"].astype(int)
如果需要把结果存储为二进制字符串格式,可以在运算后追加格式转换:
# 异或运算后转二进制字符串格式存储 output["Delta (Pos. Difference)"] = (output["Settings 1 Values"].astype(int) ^ output["Settings 2 Values"].astype(int)).apply(lambda x: format(x, 'b'))
方案2:修正现有循环的写法
你原有代码里的语法错误是output.loc(index, "Settings 2 Values")用了圆括号,loc取值应该用方括号,修正后即可正常运行:
for index, row in output.iterrows(): output.loc[index, 'CPU Address'] = hex(CPU_START_ADDR + (2 * index))[2:] # 直接用行数据的整数值做异或,不需要提前转二进制字符串 settingXor = int(row["Settings 1 Values"]) ^ int(row["Settings 2 Values"]) output.loc[index, "Delta (Pos. Difference)"] = settingXor
注意事项
- 运算前需要确认
Settings 1 Values和Settings 2 Values两列没有空值、非数字等无法转为整数的异常内容 - 数据量较大时优先选择向量化运算方案,
iterrows循环的执行效率会低很多
内容的提问来源于stack exchange,提问作者parzival
相关产品推荐
相关产品推荐

