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

如何计算Python DataFrame对应列的匹配率?对比不同来源数据集

需求说明

现有两个来自不同数据源的DataFrame(df1与df2),二者理论上应包含一致数据。需返回df1的所有列名,以及各列与df2中对应列(如Age对应Age_2)的匹配率;若df1某列在df2无对应列(如ID),则匹配率标记为N/A。

输入示例

df1 = 
ID  Age  Value  Name
1   10    1000  Red
2   20    2000  Blue
3   30    3000  Orange
4   40    4000  Grey

df2 = 
Age_2  Value_2  Name_2
10    1000  red
20    1500  blue
30    3000  orange
40    4000  white

期望输出

Name  MatchRate
ID     N/A
Age    1.00
Value  0.75  
Name   0.75

实现代码

import pandas as pd

# 构造示例数据(实际使用时替换为你的数据源)
df1 = pd.DataFrame({
    'ID': [1,2,3,4],
    'Age': [10,20,30,40],
    'Value': [1000,2000,3000,4000],
    'Name': ['Red','Blue','Orange','Grey']
})

df2 = pd.DataFrame({
    'Age_2': [10,20,30,40],
    'Value_2': [1000,1500,3000,4000],
    'Name_2': ['red','blue','orange','white']
})

# 初始化结果表,默认匹配率为N/A
result = pd.DataFrame({'Name': df1.columns, 'MatchRate': 'N/A'})

# 遍历df1列,计算对应匹配率
for col in df1.columns:
    df2_col = f"{col}_2"
    if df2_col in df2.columns:
        # 统一转换为字符串并小写,处理大小写不一致的情况
        match_count = (df1[col].astype(str).str.lower() == df2[df2_col].astype(str).str.lower()).sum()
        match_rate = match_count / len(df1)
        # 更新结果表中的匹配率,保留两位小数
        result.loc[result['Name'] == col, 'MatchRate'] = round(match_rate, 2)

# 格式化匹配率的显示格式
result['MatchRate'] = result['MatchRate'].apply(lambda x: f"{x:.2f}" if isinstance(x, float) else x)

print(result)

代码说明

  • 先构造示例中的两个DataFrame,实际场景中直接替换为你的业务数据源即可
  • 初始化结果表时,默认所有列的匹配率为N/A
  • 遍历df1的每一列,检查df2中是否存在列名_2格式的对应列
  • 计算匹配率时统一转换为字符串并小写,解决示例中Name列大小写不一致的问题
  • 最后格式化匹配率为两位小数,保证输出格式与期望一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 13:45:31