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

行数不等的Pandas DataFrame比对生成结果遇ValueError问题

解决行数不等的Pandas DataFrame对比问题

问题需求

对比两个行数不相等的Pandas DataFrame,生成新的DataFrame:

  • 匹配的记录标记为True
  • 不匹配及缺失的记录标记为False

示例数据

df1:

date   x  y
0  2022-11-01   4  5
1  2022-11-02  12  5
2  2022-11-03  11  3

df2:

date   x  y
0  2022-11-01   4  5
1  2022-11-02  11  5

预期输出

df_output:

date     x      y
0  True  True   True
1  False False False
2  False False False

报错代码及信息

运行以下代码时报错:

import pandas as pd
import numpy as np

df1 = pd.DataFrame({'date':['2022-11-01', '2022-11-02', '2022-11-03'],'x':[4,12,11],'y':[5,5,3]})
df2 = pd.DataFrame({'date':['2022-11-01', '2022-11-02'],'x':[4,11],'y':[5,5]})

df_output = pd.DataFrame(np.where(df1 == df2, True, False), columns=df1.columns)
print(df_output)

报错信息:

ValueError: Can only compare identically-labeled DataFrame objects

报错原因

Pandas要求对比的DataFrame必须行列标签完全一致,包括行数、列数以及索引。这里df1有3行,df2仅2行,直接用==对比会触发标签不匹配的错误。

解决方案

先将df2对齐到df1的行索引,缺失行用NaN填充,再进行对比:

import pandas as pd
import numpy as np

df1 = pd.DataFrame({'date':['2022-11-01', '2022-11-02', '2022-11-03'],'x':[4,12,11],'y':[5,5,3]})
df2 = pd.DataFrame({'date':['2022-11-01', '2022-11-02'],'x':[4,11],'y':[5,5]})

# 将df2对齐到df1的行索引,缺失行填充NaN
df2_aligned = df2.reindex(df1.index)
# 逐元素对比,不匹配或缺失都标记为False
df_output = (df1 == df2_aligned).fillna(False)

print(df_output)

代码说明

  1. df2.reindex(df1.index):让df2使用df1的行索引,缺失的行(如索引2)对应列的值自动填充为NaN
  2. df1 == df2_aligned:逐元素对比,相等为True,不相等为False,缺失位置会得到NaN
  3. .fillna(False):把所有NaN替换为False,满足“缺失记录标记为False”的需求

运行后输出结果与预期一致:

date      x      y
0   True   True   True
1  False  False  False
2  False  False  False

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 21:10:25