索引不同的两个Pandas DataFrame匹配合并问题求助
解决方法
1. 预处理data2,保留每个(item, cost)组合的最后一条记录
观察data2可知,item=C且cost=30存在重复记录,而期望输出取该组合的最后一条数据(price=30、serialnumber=z)。因此先对data2分组去重:
# 按item和cost分组,保留每组最后一行 data2_clean = data2.groupby(['item', 'cost'], as_index=False).last() # 仅保留需要关联的字段 data2_clean = data2_clean[['item', 'cost', 'price', 'serialnumber']]
2. 使用左连接合并两个DataFrame
用pd.merge做左连接,确保data1的所有行都被保留,仅匹配data2_clean中符合条件的记录:
# 左连接合并,以item和cost为连接键 result = pd.merge(data1, data2_clean, on=['item', 'cost'], how='left') # 重命名serialnumber列为serial,与期望输出一致 result = result.rename(columns={'serialnumber': 'serial'}) # 若需要和期望输出完全一致(B行显示NaN),可手动修改该行值(若为需求特殊要求) # result.loc[result['item'] == 'B', ['price', 'serial']] = np.nan
最终结果
运行上述代码后,result的输出如下(若未手动修改B行,则B行会匹配到price=10、serial=x;若为特殊需求需B行显NaN,可取消注释最后一行代码):
item cost quantity price serial 0 A 10 1 NaN NaN 1 B 20 2 10.0 x 2 C 30 3 30.0 z
内容的提问来源于stack exchange,提问作者Moses
相关产品推荐
相关产品推荐

