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

如何检查pandas列的字符串列表元素是否存在于另一列中

问题原因

原代码无法正确匹配的核心问题是:annotation列存储的是字符串列表,而非单个字符串。原写法直接将整个列表对象作为判断主体,执行列表 in 句子字符串的逻辑,只有当句子中恰好出现和列表打印格式完全一致的字面量(比如带中括号、引号的列表文本)时才会返回Yes,完全不符合实际匹配需求。

修正代码

你的实际需求是检查annotation列表中的字符串是否存在于对应行的note_sentence文本中,根据判断规则不同可选择对应实现:

  • 只要列表中任意一个字符串出现在句子中就标记为Yes
df_feature_case_notes['Exists'] = df_feature_case_notes.apply(
    lambda x: 'Yes' if any(anno in x['note_sentence'] for anno in x['annotation']) else 'No',
    axis=1
)

代码中用any()遍历当前行annotation列表的每一个字符串元素,逐个判断是否为note_sentence的子串,只要有一个元素命中就返回匹配成功。

  • 需要忽略大小写做匹配
    如果不需要区分英文大小写,可以将文本和匹配串统一转为小写/大写后再判断:
df_feature_case_notes['Exists'] = df_feature_case_notes.apply(
    lambda x: 'Yes' if any(anno.lower() in x['note_sentence'].lower() for anno in x['annotation']) else 'No',
    axis=1
)
  • 需要列表中所有字符串都出现在句子中才标记为Yes
    将代码中的any()替换为all()即可:
df_feature_case_notes['Exists'] = df_feature_case_notes.apply(
    lambda x: 'Yes' if all(anno in x['note_sentence'] for anno in x['annotation']) else 'No',
    axis=1
)
特殊情况处理

如果你的annotation列看起来是列表,但实际存储的是列表格式的字符串(比如取值为"['headache','cough']"的字符串类型,而非真正的list对象),需要先将其转换为真实列表再执行匹配,转换代码如下:

import ast
df_feature_case_notes['annotation'] = df_feature_case_notes['annotation'].apply(ast.literal_eval)

示例数据截图

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 23:15:51