You need to enable JavaScript to run this app. 如何高效遍历Pandas DataFrame列实现唯一两两列对比
优惠活动
大模型
产品
解决方案
定价
更多

如何高效遍历Pandas DataFrame列实现唯一两两列对比

解决方案

核心思路是用itertools.combinations生成无重复的两两列组合,天然规避colA&colB、colB&colA重复统计的问题,100列仅需计算4950组,计算量极低。

前置依赖导入

import pandas as pd
import numpy as np
from itertools import combinations

示例数据构造

df = pd.DataFrame({
    "colA": [1],
    "colB": [1],
    "colC": [2],
    "colD": [1]
})

方法1:通用可自定义对比规则(可读性最优)

适合所有自定义对比逻辑的场景,写法简单易维护:

compare_result = []
# 生成所有不重复的两列组合
for col1, col2 in combinations(df.columns, 2):
    # 此处可替换为任意自定义对比规则
    all_equal = (df[col1] == df[col2]).all()
    compare_result.append({
        "列1": col1,
        "列2": col2,
        "对比结果": "yes" if all_equal else "no"
    })
# 转为DataFrame格式方便后续查看/处理
result_df = pd.DataFrame(compare_result)

方法2:向量化运算(超大量列场景效率最优)

如果对比规则是判断两列全量值是否相等,可直接用矩阵运算完全规避循环,列数过千时性能优势明显:

# 生成列相等布尔矩阵
equal_matrix = df.T.pipe(lambda x: x.eq(x.iloc[:, 0], axis=0)).values
for idx in range(1, df.shape[1]):
    equal_matrix[:, idx] = df.T.eq(df.T.iloc[:, idx], axis=0).values
# 仅取上三角区域规避重复对比
upper_mask = np.triu(np.ones_like(equal_matrix, dtype=bool), k=1)
result = [
    (df.columns[i], df.columns[j], "yes" if equal_matrix[i,j] else "no")
    for i,j in zip(*np.where(upper_mask))
]
result_df = pd.DataFrame(result, columns=["列1", "列2", "对比结果"])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 23:54:03