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

如何用Python检查DataFrame中指定值匹配并标记YES?

解决方案

实现步骤与代码

先处理required列的字符串列表格式,将其转为可操作的Python列表,再通过前向填充补全对应行的关键词集合,最后检查data列是否包含目标关键词并标记结果。

import pandas as pd
import numpy as np
import ast

# 构建初始DataFrame
a1 = ["Highschool.sg","school","school.sggs","school.coep","school.mit","address","address.pune","address.Nanded","address.mumbai"]
a2 = [34,56,55,34,23,60,34,56,100]
a3 = [np.nan,str(["sggs","coep","mit"]),np.nan,np.nan,np.nan,str(["pune","Nanded"]),np.nan,np.nan,np.nan]
df = pd.DataFrame(list(zip(a1,a2,a3)), columns=['data','id','required'])

# 1. 转换字符串列表为真实列表,并用前向填充补全NaN值
df['required'] = df['required'].apply(lambda x: ast.literal_eval(x) if pd.notna(x) else x)
df['required'] = df['required'].ffill()

# 2. 定义匹配检查函数
def check_match(row):
    if pd.isna(row['required']):
        return np.nan
    # 提取data字段中的关键词部分(如school.sggs提取sggs)
    data_keyword = row['data'].split('.')[-1] if '.' in row['data'] else ''
    # 检查关键词是否在目标列表中
    return 'YES' if data_keyword in row['required'] else np.nan

# 3. 生成匹配标记列
df['match'] = df.apply(check_match, axis=1)

# 查看结果
print(df)

代码解释

  • 处理required列:用ast.literal_eval把字符串形式的列表(如"['sggs','coep','mit']")转成真实Python列表;通过ffill()将上方的有效关键词列表填充到后续NaN行,确保每个待检查行对应正确的关键词集合。
  • 匹配逻辑:拆分data字段取末尾关键词,判断该关键词是否存在于当前行的required列表中,匹配则返回YES,否则返回空值。
  • 结果输出:新增match列,仅在匹配成功的行标记YES,其余行保持空值。

预期输出

data   id             required match
0  Highschool.sg   34                  NaN   NaN
1          school   56  ['sggs', 'coep', 'mit']   NaN
2    school.sggs   55  ['sggs', 'coep', 'mit']   YES
3    school.coep   34  ['sggs', 'coep', 'mit']   YES
4     school.mit   23  ['sggs', 'coep', 'mit']   YES
5         address   60     ['pune', 'Nanded']   NaN
6   address.pune   34     ['pune', 'Nanded']   YES
7 address.Nanded   56     ['pune', 'Nanded']   YES
8  address.mumbai  100     ['pune', 'Nanded']   NaN

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 12:35:30