如何基于匹配列合并两个DataFrame并补充缺失的PRICE列数据
基于多列匹配为DataFrame填充价格列
要实现将df中的PRICE列匹配到df2(仅当TITLE和CODE同时匹配时填充,无匹配项填NaN),可以用pandas的merge()函数完成,步骤如下:
核心思路
通过**左连接(left join)**基于TITLE和CODE两列关联两个DataFrame,保留df2的所有行,同时将df中对应匹配行的PRICE值带入,无匹配的行自动填充NaN。
代码实现
1. 导入库并构造示例数据
import pandas as pd # 原始数据df(含PRICE列) df = pd.DataFrame({ 'id': [1, 2, 3, 4], 'TITLE': ['苹果', '香蕉', '橙子', '葡萄'], 'CODE': ['FRU001', 'FRU002', 'FRU003', 'FRU004'], 'PRICE': [5.99, 3.99, 4.99, 6.99] }) # 需要填充的df2(无PRICE列) df2 = pd.DataFrame({ 'id': [1, 2, 3, 5], 'TITLE': ['苹果', '香蕉', '芒果', '葡萄'], 'CODE': ['FRU001', 'FRU002', 'FRU005', 'FRU004'] })
2. 执行匹配填充
# 仅关联需要的列(避免重复id列),基于TITLE和CODE左连接 result_df = df2.merge(df[['TITLE', 'CODE', 'PRICE']], on=['TITLE', 'CODE'], how='left')
3. 查看结果
打印result_df会得到:
id TITLE CODE PRICE 0 1 苹果 FRU001 5.99 1 2 香蕉 FRU002 3.99 2 3 芒果 FRU005 NaN 3 5 葡萄 FRU004 6.99
注意事项
- 如果
df中存在重复的TITLE+CODE组合,会导致结果出现重复行,可先对df去重:df_clean = df.drop_duplicates(subset=['TITLE', 'CODE'], keep='first') result_df = df2.merge(df_clean[['TITLE', 'CODE', 'PRICE']], on=['TITLE', 'CODE'], how='left') - 确保
TITLE和CODE列的数据类型一致(比如都是字符串),否则可能出现匹配失败的情况。
内容的提问来源于stack exchange,提问作者Ben-geo
相关产品推荐
相关产品推荐

