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

如何遍历含字符串的DataFrame行并匹配列表元素生成新列?

解决方案

你的代码问题在于循环中每次赋值都会覆盖df['matched'],最后只会保留最后一个列表元素的匹配结果,所以无法得到正确的多匹配结果。以下是几种可行的解决方法:

方法1:使用apply自定义匹配逻辑

先把匹配列表转成小写集合方便快速查找,同时构建小写值到原列表元素的映射字典,再对name列逐个处理:

import numpy as np
import pandas as pd

# 示例数据
df = pd.DataFrame({'name': ['tom', 'jerry', 'steven', 'Zeo']})
match_list = ['tom', 'zeo']

# 构建小写映射集合和字典
match_set = set(item.lower() for item in match_list)
match_map = {item.lower(): item for item in match_list}

# 生成matched列
df['matched'] = df['name'].apply(lambda x: match_map.get(x.lower(), np.nan))

运行后输出结果:

name matched
0     tom     tom
1   jerry     NaN
2  steven     NaN
3     Zeo     zeo

方法2:使用str.lower结合replace与where

通过字符串转小写、映射替换,再筛选出匹配项:

df['matched'] = df['name'].str.lower().replace(match_map).where(df['name'].str.lower().isin(match_set), np.nan)

原代码问题分析

你写的循环中,每一次迭代都会重新给df['matched']整列赋值:第一次循环处理tom时,只有tom对应的位置是tom,其余为nan;第二次循环处理zeo时,会覆盖整列数据,最终只有Zeo对应的位置是zeo,其他行(包括tom)都会变成nan,所以无法得到正确结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 01:05:19