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

Python如何基于另一DataFrame的条件返回多列匹配值

正确实现方案

实现思路

  • 先预处理DF2规则表:将逗号分隔的Group拆分为单行数据,把Text列的关键词拆分、去空格、转小写生成关键词列表,避免匹配异常
  • 将DF1的Text列统一转小写,规避大小写不一致导致的匹配失败问题
  • 按Group字段关联DF1和预处理后的规则表,判断DF1的Text是否包含对应规则的关键词(规则无关键词时只要Group匹配就算成功)
  • 把匹配到的结果赋值给新增的两个预测列

代码示例

import pandas as pd

# ---------------------- 预处理DF2规则表 ----------------------
# 拆分逗号分隔的Group为多行
df2_expanded = DF2.assign(Group=DF2['Group'].str.split(',')).explode('Group')
# 去除Group前后多余空格
df2_expanded['Group'] = df2_expanded['Group'].str.strip()
# 拆分关键词、去空格、转小写,空值转为空列表
df2_expanded['keywords'] = df2_expanded['Text'].fillna('').str.split(',').apply(
    lambda x: [kw.strip().lower() for kw in x if kw.strip()]
)
# 保留规则所需字段
df2_rules = df2_expanded[['Category', 'Subcategory', 'Group', 'keywords']].reset_index(drop=True)

# ---------------------- 预处理DF1待匹配表 ----------------------
DF1['text_lower'] = DF1['Text'].str.lower()

# ---------------------- 关联匹配生成预测列 ----------------------
# 按Group关联两个表
df_merged = DF1.merge(df2_rules, on='Group', how='left')

# 匹配判断函数
def match_rule(row):
    # 规则无关键词,只要Group匹配就成功
    if not row['keywords']:
        return pd.Series([row['Category'], row['Subcategory']])
    # 检查是否有任意关键词命中
    for kw in row['keywords']:
        if kw in row['text_lower']:
            return pd.Series([row['Category'], row['Subcategory']])
    # 未匹配返回空
    return pd.Series([None, None])

# 生成预测列
DF1[['predictedCategory', 'predictedSubcategory']] = df_merged.apply(match_rule, axis=1)

# 清理中间辅助列
DF1 = DF1.drop('text_lower', axis=1)

常见返回空值的原因

  • 未拆分DF2中逗号分隔的Group,直接用G1,G5整体和DF1的单个Group值匹配,导致匹配失败
  • 未处理大小写,比如DF1的Text是Blue wrapper,关键词是blue,大小写不一致导致匹配不到
  • 关键词拆分后未去空格,比如关键词带前导空格 flavors,匹配时无法命中无空格的文本内容
  • 多条件判断时括号优先级写错,导致逻辑判断结果始终为False

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 00:45:03