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

如何基于车牌尾号匹配DataFrame获取车型并保持行数一致?

解决方法:先构建唯一映射再关联

你的问题出在df_First里存在重复的Car Plate End行,直接用merge会触发笛卡尔积,导致结果出现重复行和多余列。要实现需求,我们需要先从df_First中提取车牌尾号与车型的唯一对应关系,再关联到df_Second上。

步骤1:构建唯一映射表

首先从df_First中筛选出不重复的Car Plate End和Car Model组合:

# 提取唯一的车牌-车型映射
unique_car_map = df_First[['Car Plate End', 'Car Model']].drop_duplicates()

这一步会把重复的Fiesta 2010行去掉,得到每个车牌尾号对应的唯一车型。

步骤2:关联到df_Second

使用left join(保留df_Second的所有行,匹配不到的填充NaN)进行合并:

df_Total = pd.merge(df_Second, unique_car_map, on='Car Plate End', how='left')

更简洁的替代方案:使用map

如果你觉得merge步骤麻烦,也可以先创建字典映射,再用map方法直接添加列:

# 创建车牌到车型的字典
model_dict = df_First.drop_duplicates('Car Plate End').set_index('Car Plate End')['Car Model'].to_dict()

# 复制原df_Second并添加新列
df_Total = df_Second.copy()
df_Total['Car Model'] = df_Total['Car Plate End'].map(model_dict)

验证结果

运行上述代码后,你会得到期望的输出:

Car Plate End  Cost_Max  Cost_Min     Car Model
0            749        10         1  Fiesta 2010
1            749        20         2  Fiesta 2010
2            749        30         3  Fiesta 2010
3            100        40         4   Cruze 2020
4            749        50         5  Fiesta 2010
5            100        60         6   Cruze 2020
6            200        70         7  Fiesta 2005
7            500        80         8          NaN

为什么之前的merge(how='outer')不行?

  • df_First中同一Car Plate End有多行,merge时会对每一行进行匹配,导致结果出现大量重复行
  • outer join会保留两个表的所有行,而你只需要保留df_Second的行,left join更合适
  • 原merge会带上df_First的所有列(比如Car Color、Num Door),而我们只需要Car Model,所以先筛选列再合并就不会有多余列

内容的提问来源于stack exchange,提问作者Jane Borges

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 18:02:49