Pandas DataFrame基于部门名字段子串条件新增Region列(避免正则)
Pandas 新增Region列实现方案
直接用 Pandas 原生字符串方法结合 np.where 做分层条件判断即可,全程不需要正则,逻辑清晰性能也优于逐行遍历或者硬编码替换:
import pandas as pd import numpy as np # 你的原始DataFrame,此处仅为示例 df = pd.DataFrame({ 'Department_Name': ["ABC Europe - Team A", "HQ", "", "Asia Pacific - Operation", None, "North America - Sales"] }) # 核心逻辑 # 先统一处理空值(含空字符串、NaN、全空格场景) df['Region'] = np.where( df['Department_Name'].fillna('').str.strip().eq(''), 'Others', np.where( df['Department_Name'].str.contains('-', na=False), # 拆分后取第一段并去除首尾冗余空格 df['Department_Name'].str.split('-').str[0].str.strip(), df['Department_Name'] ) )
逻辑说明
- 第一步先统一处理空值:用
fillna('')把NaN转为空字符串,再用str.strip()去掉首尾空格后判空,完全覆盖规则3的空值场景,鲁棒性更高 - 非空值用
str.contains('-', na=False)判断是否包含分隔符,na=False参数避免空值触发报错 - 拆分用
str.split('-')后取第一个元素,再做一次去空格处理,避免部门名前后的冗余空格影响结果,完全匹配规则1的要求 - 不包含分隔符的场景直接返回原值,匹配规则2的要求
示例运行结果
| Department_Name | Region |
|---|---|
| ABC Europe - Team A | ABC Europe |
| HQ | HQ |
| Others | |
| Asia Pacific - Operation | Asia Pacific |
| None | Others |
| North America - Sales | North America |
内容的提问来源于stack exchange,提问作者Mangowithice
相关产品推荐
相关产品推荐

