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

索引不同的两个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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 19:12:40