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

Pandas如何通过子串匹配实现两个DataFrame的字段关联合并

pandas实现项目名与动态样式表的关联匹配

实现思路

不需要硬编码样式匹配规则,直接基于动态更新的df1自动生成匹配逻辑,逐行扫描df2的项目名字段,命中样式名子串时关联对应样式ID,未命中则留空。

可直接运行的代码

导入依赖后替换成你自己的真实df1、df2即可使用:

import pandas as pd

# --------------------------
# 此处替换为你的真实df1、df2
# df1 结构:style_gid, style_name(3位大写字母,条目动态变化)
# df2 结构:project_gid, project_name
# --------------------------

# 示例测试数据(可删除)
df1 = pd.DataFrame({
    "style_gid": ["s001", "s002", "s003"],
    "style_name": ["ABC", "DEF", "XYZ"]
})
df2 = pd.DataFrame({
    "project_gid": ["p001", "p002", "p003", "p004"],
    "project_name": ["2024ABC春季项目", "DEF专项迭代", "通用运营项目", "双XYZ大促项目"]
})

# 1. 基于df1动态生成正则匹配规则,支持匹配任意一个样式名
match_pattern = "|".join(df1["style_name"].tolist())

# 2. 提取每个项目名中命中的样式名,无匹配返回空值
df2["match_style_name"] = df2["project_name"].str.extract(f"({match_pattern})", expand=False)

# 3. 左关联拿到对应的style_gid,清理临时列得到最终结果
final_df = df2.merge(
    df1.rename(columns={"style_name": "match_style_name"}),
    on="match_style_name",
    how="left"
).drop(columns=["match_style_name"])

注意事项

  • 匹配逻辑会识别project_name任意位置的样式名,不管子串在字段开头、中间还是结尾都能正常命中
  • df1后续新增、删除、修改样式条目时不需要调整代码,重新运行即可自动适配最新的匹配规则
  • 无匹配的项目行,style_gid、style_name字段会自动填充空值NaN
  • 若存在单个项目名同时包含多个样式名的特殊场景,上述代码会默认返回第一个命中的样式;如果需要支持一对多匹配,可以把str.extract替换为str.findall后再做行展开即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 05:15:54