You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在忽略列顺序的情况下比较Pandas DataFrame?

忽略列顺序判断两个Pandas DataFrame是否相等

针对需求——忽略列名、仅依据列内容和行顺序判断两个DataFrame是否相等,可通过以下步骤实现:

实现思路

核心是将两个DataFrame的列按列内容排序,让内容一致的列处于相同位置,再直接比较排序后的DataFrame是否完全相等。

具体代码

import pandas as pd

def sort_df_by_column_content(df):
    # 将每一列的所有值转为元组(作为排序的唯一标识),以此为依据对列排序
    sorted_columns = sorted(df.columns, key=lambda col: tuple(df[col]))
    return df[sorted_columns]

# 初始化示例DataFrame
df_a = pd.DataFrame({ 0: ['a', 'b', 'c'], 1: [9, 8, 7], 2: [True, True, False] })
df_b = pd.DataFrame({ 0: [9, 8, 7], 1: [True, True, False], 2: ['a', 'b', 'c'] })

# 对两个DataFrame按列内容排序
sorted_a = sort_df_by_column_content(df_a)
sorted_b = sort_df_by_column_content(df_b)

# 判断是否相等
result = sorted_a.equals(sorted_b)
print(result)  # 输出:True

关键细节说明

  • 用tuple(df[col])将列内容转为元组:因为Pandas的Series无法直接作为排序键,元组是可哈希且能唯一代表列内容的结构。
  • sorted()函数根据列内容的元组对列排序,确保内容一致的列在排序后位置相同。
  • 最后用equals()方法逐元素比较排序后的DataFrame,确保行顺序和对应位置的元素完全一致。

边界情况处理

  • 若两个DataFrame行数不同:直接判定不相等(行顺序一致的前提是行数相同)。
  • 若列数不同:直接判定不相等,无法满足“包含相同列”的条件。
  • 若存在内容完全重复的列:排序后不影响最终比较结果,equals()会正确识别对应位置的元素。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 19:10:11