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

如何用Pandas判断df1的name列值是否存在于df2任意列并标记

实现方案

方法一:基础遍历匹配(清晰易懂)

先把df2所有单元格的文本提取成一个列表,然后逐个检查df1的name是否出现在任意文本中:

import pandas as pd

# 示例数据(替换成你的实际数据)
df1 = pd.DataFrame({
    'id': [1,2,3],
    'name': ['Alice', 'Bob', 'Charlie'],
    'city': ['NY', 'LA', 'Chicago'],
    'age': [25,30,35],
    'found_in_df2': ['', '', '']
})

df2 = pd.DataFrame({
    'comment': ['Alice left a message', 'Great response', 'Charlie asked'],
    'question': ['What did Bob say?', 'Where is Alice?', 'No question'],
    'response': ['Answer to Bob', 'Hello Alice', 'Charlie got it']
})

# 提取df2所有列的文本到一维列表
all_df2_texts = df2.stack().tolist()

# 定义检查函数:判断name是否在任意df2文本中
def is_name_present(name):
    return 'yes' if any(name in text for text in all_df2_texts) else ''

# 批量更新df1的found_in_df2列
df1['found_in_df2'] = df1['name'].apply(is_name_present)

方法二:向量化优化(适合大数据集)

避免逐行循环,通过合并df2所有文本为一个大字符串,利用字符串包含判断提升效率:

# 将df2所有单元格文本合并为单个字符串(用特殊分隔符避免误匹配)
combined_df2_text = '###'.join(df2.stack().astype(str))

# 批量判断并赋值
df1['found_in_df2'] = df1['name'].apply(lambda x: 'yes' if x in combined_df2_text else '')

额外处理:大小写不敏感匹配

如果需要忽略大小写差异,统一转为小写后再判断:

# 预处理df2文本为小写
all_df2_texts_lower = [text.lower() for text in df2.stack().astype(str).tolist()]

# 对df1的name转小写后检查
df1['found_in_df2'] = df1['name'].str.lower().apply(
    lambda x: 'yes' if any(x in text for text in all_df2_texts_lower) else ''
)

说明

  • 两种方法都支持子字符串匹配(比如name是"Ali",文本中有"Alice"会被判定为存在)
  • 大数据场景下优先选方法二,向量化操作比逐行循环快很多

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 15:35:30