如何基于非完全匹配的Rate列合并Pandas DataFrame并补全数据?
解决Pandas合并含非完全一致Rate列的表格问题
核心问题在于Rate列值不匹配导致outer join后出现缺失值,要实现每行都有完整的Rate、Age、Grade数据,需根据Rate不匹配的原因分两种场景处理:
场景1:Rate存在浮点精度差异
如果两个表的Rate是数值型,因浮点精度误差(如1.0和1.0000001)导致本该匹配的行未关联,先统一Rate的精度再合并:
import pandas as pd # 测试示例数据 df_age = pd.DataFrame({'Rate': [1.0, 2.0, 3.0], 'Age': [20, 25, 30]}) df_grade = pd.DataFrame({'Rate': [1.0000001, 2.0000002, 3.0], 'Grade': ['A', 'B', 'C']}) # 统一精度,比如保留2位小数(可根据实际需求调整) df_age['Rate'] = df_age['Rate'].round(2) df_grade['Rate'] = df_grade['Rate'].round(2) # 执行outer join,此时精度一致的Rate会正确匹配 merged_result = pd.merge(df_age, df_grade, on='Rate', how='outer') # 若仍有缺失值,按业务规则填充(示例:用前向填充或固定值) merged_result = merged_result.fillna(method='ffill') # merged_result = merged_result.fillna({'Age': 0, 'Grade': 'N/A'})
场景2:Rate为不同离散值
如果两个表的Rate是完全不同的离散值,需先收集所有唯一Rate,再分别关联Age和Grade,最后填充缺失值:
# 测试示例数据 df_age = pd.DataFrame({'Rate': [1, 2, 3], 'Age': [20, 25, 30]}) df_grade = pd.DataFrame({'Rate': [2, 3, 4], 'Grade': ['B', 'C', 'D']}) # 获取所有唯一的Rate值 all_unique_rates = pd.DataFrame({'Rate': pd.concat([df_age['Rate'], df_grade['Rate']]).unique()}) # 依次左连接获取Age和Grade merged_result = all_unique_rates.merge(df_age, on='Rate', how='left') merged_result = merged_result.merge(df_grade, on='Rate', how='left') # 按业务规则填充缺失值(示例:用Age的均值填充,Grade用默认值) merged_result['Age'] = merged_result['Age'].fillna(df_age['Age'].mean()) merged_result['Grade'] = merged_result['Grade'].fillna('Unknown')
关键说明
要实现每行都有完整数据,必须明确缺失值填充规则——对于仅在一个表中存在的Rate,原始数据中没有对应的Age或Grade,只能通过插值、默认值、均值等方式补全。
内容的提问来源于stack exchange,提问作者d3v
相关产品推荐
相关产品推荐

