Python中Pandas DataFrame逐行检查相邻列值是否相等并新增列实现方法
实现DataFrame逐行相邻列等值校验的方法
核心实现逻辑
我们可以通过列移位对比的方式实现需求,该方法同时兼容数值、字符串等多种可比较数据类型,不需要逐行循环,执行效率高。
完整代码示例
初始化示例DataFrame(原有参考代码)
import itertools as it import pandas as pd x_list = list(set(it.permutations([1,1,0,0]))) x_df = pd.DataFrame(x_list) x_df.columns = ['one', 'two', 'three', 'four']
新增校验结果列
# 方法1:仅适用于数值类型,通过行差分判断(代码更简洁) # 新列值为True代表该行存在相邻列取值相等,False代表不存在 x_df['has_adjacent_equal'] = x_df.diff(axis=1).eq(0).any(axis=1) # 方法2:兼容所有可比较数据类型,通过列移位对比(适用范围更广) x_df['has_adjacent_equal'] = x_df.eq(x_df.shift(axis=1), axis=0).iloc[:,1:].any(axis=1) # 若需要统计每行相邻相等的列对数量,把上述代码的any改为sum即可 x_df['adjacent_equal_count'] = x_df.diff(axis=1).eq(0).sum(axis=1)
逻辑说明
- 差分方法:
diff(axis=1)会按行计算后一列减前一列的差值,差值为0即代表两列取值相等,再通过any(axis=1)逐行判断是否存在符合条件的列对。 - 移位方法:
shift(axis=1)会将所有列向右平移一位,第一列填充为NaN,和原DataFrame逐元素对比后,去掉无意义的第一列对比结果,再逐行判断即可。
内容的提问来源于stack exchange,提问作者nleiserowitz
相关产品推荐
相关产品推荐

