如何用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
相关产品推荐
相关产品推荐

