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

如何基于非完全匹配的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 23:22:13