Pandas基于子字符串匹配实现跨DataFrame列值映射填充
Pandas子串匹配填充字段实现
直接通过字段遍历+子串判断即可完成匹配填充,无需额外复杂依赖。
- 匹配规则:逐行检查df1的
Item_Description字段,若df2中某条记录的Item是该描述的子串,就把对应Commodity_Code填入df1当前行 - 无匹配项时默认保留空值,需要其他默认值可自行修改返回逻辑
完整代码
import pandas as pd # 原始数据定义 df1 = pd.DataFrame({ 'Item_Description': [ 'SYD_SYDNEY AIRPORTS CORPORATION LIMITED-Aircraft Parking :Sep', 'SYD_QANTAS AIRWAYS LTD-Turn Cost :Sep', 'SYD_SNP SECURITY SERVICES PTY LTD-Aircraft Security :Sep' ], 'Commodity_Code': ["", "", ""] }) df2 = pd.DataFrame({ 'Item': ['Turn Cost', 'Aircraft Security', 'Aircraft Parking'], 'Commodity_Code': [24101900, 92121700, 78141805] }) # 定义匹配函数 def get_matched_code(desc_text): for _, item_row in df2.iterrows(): if item_row['Item'] in desc_text: return item_row['Commodity_Code'] return "" # 执行填充 df1['Commodity_Code'] = df1['Item_Description'].apply(get_matched_code)
最终输出结果
执行代码后df1的内容如下,完全符合匹配要求:
| Item_Description | Commodity_Code |
|---|---|
| SYD_SYDNEY AIRPORTS CORPORATION LIMITED-Aircraft Parking :Sep | 78141805 |
| SYD_QANTAS AIRWAYS LTD-Turn Cost :Sep | 24101900 |
| SYD_SNP SECURITY SERVICES PTY LTD-Aircraft Security :Sep | 92121700 |
提示:如果单条描述可能匹配多个df2中的Item值,代码默认返回df2中排序靠前的匹配项对应编码,可根据业务需要调整df2的排序或者匹配判断逻辑修改优先级。
内容的提问来源于stack exchange,提问作者toerag
相关产品推荐
相关产品推荐

