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

Pandas如何循环匹配A列包含的字符串并更新dept列值

问题原因

你的循环逻辑存在覆盖问题:每次遍历都会重写整个dept列,前一轮匹配到的部门值会被后一轮的"Unknown"默认值覆盖,只有最后一个遍历的部门的匹配结果能保留,因此绝大多数行最终都会变成Unknown。

解决方案

方案1:向量化实现(推荐,性能最优,无需循环)

直接通过正则提取匹配的部门值,即使你有171个部门也能高效运行,不会有性能问题:

import re
import pandas as pd

depts = ['PHYS', 'PSYCH']
# 拼接正则规则,re.escape可避免部门名包含./*+等正则特殊字符时报错
pattern = '|'.join(re.escape(dept) for dept in depts)
# 提取匹配到的第一个部门,未匹配到的填充为Unknown
df['dept'] = df['a'].str.extract(f'({pattern})', expand=False).fillna('Unknown')

方案2:循环逻辑修正版

如果需要保留循环写法,只需先初始化默认值,再仅更新匹配到的行即可:

depts = ['PHYS', 'PSYCH']
# 先初始化所有行的dept为默认值
df['dept'] = 'Unknown'
for dept in depts:
    # 仅修改当前未匹配、且符合当前部门规则的行
    df.loc[df['a'].str.contains(dept, na=False) & (df['dept'] == 'Unknown'), 'dept'] = dept

na=False参数可以避免a列存在空值时匹配逻辑报错。

逻辑说明

如果某行的a列同时匹配多个部门,两种方案都会优先取部门列表中排在前面的部门值,如果你需要优先取靠后的部门,反转depts列表的遍历顺序即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 23:45:03