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

通过字符串包含匹配字典映射为Pandas DataFrame新建Factor列

问题原因

你使用的map方法执行的是完全等值匹配,而你的需求是df2的Code值作为子串匹配df1的Code值,因此原有代码无法命中匹配。

实现代码

import pandas as pd
# 示例数据
df1 = pd.DataFrame({
    'Date':['2021-01-01', '2021-01-01', '2021-01-01', '2021-01-02', '2021-01-02', '2021-01-02', '2021-01-02', '2021-01-03'],
    'Ratings':[9.0, 8.0, 5.0, 3.0, 2, 3, 6, 5],
    'Code':['R:EST 5R', 'R:EKG EK', 'R:EKG EK', 'R:EST 5R', 'R:EKGP', 'R:EST 5R', 'R:OID_P', 'R:OID_P']
})
df2 = pd.DataFrame({
    'Code':['R:EST', 'R:EKG', 'R:OID'],
    'Factor':[1, 1.3, 0.9]
})

# 构造Code到Factor的映射字典
code_map = df2.set_index('Code')['Factor'].to_dict()
# 构造正则匹配模式,按Code长度降序排列避免短前缀提前匹配
pattern = '|'.join(sorted(code_map.keys(), key=len, reverse=True))
# 提取匹配子串后映射Factor
df1['Factor'] = df1['Code'].str.extract(f'({pattern})', expand=False).map(code_map)

运行后df1的输出和你期望的df3完全一致。

逻辑说明

  • 先把df2转换为键为Code、值为Factor的字典,提升后续查找效率
  • 正则模式按Code长度倒序排列,是为了避免出现短键先匹配的错误:比如如果同时存在R:EK和R:EKG两个键,会优先匹配更长的R:EKG
  • 如果存在匹配不到的场景,可以在map后加fillna(默认值)处理缺失值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 01:54:02