如何比较参考DataFrame与目标DataFrame中的数值?
嘿,我来帮你搞定这两个DataFrame的数值对比问题!先把你给出的两个DataFrame补全(你提供的df里col5没写完,我补了一组示例值方便演示),然后分几种常用的对比方式来讲解:
先明确两个DataFrame的完整定义
import pandas as pd import numpy as np # 参考DataFrame ref ref = pd.DataFrame({ 'col1':['a','b','c','d'], 'col2':[100,100,100,300], 'col3':[200,200,500,400], 'col4':[300,np.NaN,600,600], 'col5':[400,np.NaN, 700,700] }) # 待比较的DataFrame df(补全col5的示例值) df = pd.DataFrame({ 'col2':[105,100,100,200,300], 'col3':[202,200,200,300,391], 'col4':[300,np.NaN,350,400,605], 'col5':[400,np.NaN, 700, 800, 705] })
1. 逐元素对比(生成布尔结果)
如果只是想知道每个位置的数值是否相等,直接用比较运算符就行,但要注意NaN的特殊性——默认的==会把NaN判定为不等,所以推荐用pd.DataFrame.eq()并开启na_equal=True来正确识别NaN的匹配:
普通逐元素对比(不处理NaN)
# 只对比共同的数值列(col2-col5),先对齐索引 comparison = df[['col2','col3','col4','col5']] == ref[['col2','col3','col4','col5']].reindex_like(df) print(comparison)
正确处理NaN的逐元素对比
comparison_with_nan = df[['col2','col3','col4','col5']].eq( ref[['col2','col3','col4','col5']].reindex_like(df), na_equal=True ) print(comparison_with_nan)
2. 计算数值差值(查看具体差异)
如果想知道每个位置的数值差多少,直接做减法即可:
# 先对齐索引和列,再计算差值 diff = df[['col2','col3','col4','col5']] - ref[['col2','col3','col4','col5']].reindex_like(df) print(diff)
如果想把NaN对应的差值替换成0(或其他值),可以用fillna():
diff_filled = diff.fillna(0) print(diff_filled)
3. 筛选出与参考值不符的行
如果想找出df中哪些行的数值和ref对应行(按索引)不一致,可以这么做:
# 先判断每行是否所有列都匹配 row_matches = comparison_with_nan.all(axis=1) # 筛选出不匹配的行 mismatched_rows = df[~row_matches] print(mismatched_rows)
4. 按col1关联对比(不是按索引)
如果你的df其实也有col1列,或者需要按col1的值和ref匹配(而非按索引),可以先合并两个DataFrame再对比:
# 给df添加col1列示例 df['col1'] = ['a','b','c','e','d'] # 按col1合并,区分参考值和待比较值 merged = pd.merge(ref, df, on='col1', suffixes=('_ref', '_df')) # 生成匹配结果列 merged['col2_match'] = merged['col2_ref'] == merged['col2_df'] merged['col3_match'] = merged['col3_ref'] == merged['col3_df'] # 计算差值 merged['col2_diff'] = merged['col2_df'] - merged['col2_ref'] print(merged)
几个关键注意点
- 确保只对比共同的数值列,避免因列名不一致报错;
- 处理NaN时一定要用
eq(na_equal=True),否则默认的==会把两个NaN判定为不等; - 如果是按业务字段(比如
col1)关联而非索引,必须先合并对齐再对比。
内容的提问来源于stack exchange,提问作者Florian Bernard
相关产品推荐
相关产品推荐

