如何计算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
相关产品推荐
相关产品推荐

