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

Python中识别DataFrame多列匹配指定列表字符串的对应值

嘿,我来帮你搞定这个需求!下面是具体的实现思路和代码示例,你可以直接套用或者根据自己的实际场景调整。

解决方案

首先我们先设定一个示例场景,方便你快速理解整个流程:

import pandas as pd

# 示例多列DataFrame
df = pd.DataFrame({
    'Col1': ['apple pie', 'banana bread', 'cherry tart'],
    'Col2': ['orange juice', 'grape soda', 'lemon tea'],
    'Col3': ['peach cobbler', 'plum jam', 'apple sauce']
})

# 预定义的目标单词列表
target_words = ['apple', 'banana', 'lemon']

方法1:提取每行第一个匹配的列值

如果你的需求是找到每行中第一个包含目标单词的列,并提取其对应值,可以用apply结合自定义函数实现:

def get_first_match(row, word_list):
    # 遍历当前行的所有列
    for col_name in row.index:
        # 检查当前列的文本是否包含列表中的任意单词
        if any(word in row[col_name] for word in word_list):
            return row[col_name]
    # 没有匹配项时返回空值(可根据需求改成空字符串等自定义值)
    return pd.NA

# 新增New_var列
df['New_var'] = df.apply(get_first_match, word_list=target_words, axis=1)

运行后得到的结果:

Col1          Col2          Col3        New_var
0    apple pie  orange juice  peach cobbler      apple pie
1  banana bread    grape soda      plum jam  banana bread
2   cherry tart     lemon tea    apple sauce     lemon tea

方法2:提取所有匹配的列值(拼接成字符串)

如果需要把每行中所有包含目标单词的列值都收集起来,可以修改函数逻辑,用分隔符拼接结果:

def get_all_matches(row, word_list, separator=', '):
    matched_values = []
    for col_name in row.index:
        if any(word in row[col_name] for word in word_list):
            matched_values.append(row[col_name])
    # 有匹配项就拼接,否则返回空值
    return separator.join(matched_values) if matched_values else pd.NA

df['New_var'] = df.apply(get_all_matches, word_list=target_words, axis=1)

此时第三行的结果会是 lemon tea, apple sauce,因为它的Col2和Col3都匹配了目标单词。

额外优化点

  • 忽略大小写:如果不需要区分大小写,把检查逻辑改成:
    any(word.lower() in row[col_name].lower() for word in word_list)
    
  • 精确匹配完整单词:如果你需要匹配完整单词(避免把'apple'误匹配到'applesauce'这类包含子串的情况),可以用正则表达式:
    import re
    any(re.search(rf'\b{re.escape(word)}\b', row[col_name]) for word in word_list)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:22:03