
本文介绍如何使用pandas高效识别dataframe中所有包含指定子字符串(如"financial services")的单元格,并将其标准化为单一值,再按新分类聚合统计。
本文介绍如何使用pandas高效识别dataframe中所有包含指定子字符串(如"financial services")的单元格,并将其标准化为单一值,再按新分类聚合统计。
在数据分析中,常遇到分类字段存在不规范表达的问题——例如“Financial Services”可能以“Financial Services”“Financial Services,Lending and Investments”“Administrative Services, Financial Services”等多种形式共存。若需统一归类并汇总统计,直接字符串匹配+批量替换+分组聚合是标准且高效的解决方案。
核心步骤分为三步:
- 定位匹配项:使用 .str.contains() 生成布尔掩码,精准识别所有含目标子串的行(默认忽略大小写需显式设置 case=False,此处按题设默认区分);
- 执行替换:利用 .loc[] 对匹配行的指定列赋值,实现原地标准化;
- 聚合统计:调用 .groupby().sum() 按新分类汇总数值列(如 Count),自动合并重复类别。
以下是完整可运行代码示例:
import pandas as pd
# 构造原始数据
df = pd.DataFrame({
"category_groups_list": [
"Health Care",
"Financial Services,Lending and Investments",
"Real Estate",
"Financial Services",
"Financial Services,Professional Services",
"Financial Services,Real Estate",
"Administrative Services, Financial Services"
],
"Count": [10, 15, 5, 20, 25, 10, 30]
})
# 步骤1:创建布尔掩码,匹配包含"Financial Services"的所有行
mask = df["category_groups_list"].str.contains("Financial Services")
# 步骤2:将匹配行的category_groups_list统一替换为标准名称
df.loc[mask, "category_groups_list"] = "Financial Services"
# 步骤3:按标准化后的分类分组求和
result = df.groupby("category_groups_list", as_index=False).sum()
print(result)输出结果:
category_groups_list Count 0 Financial Services 100 1 Health Care 10 2 Real Estate 5
✅ 关键注意事项:
- .str.contains() 默认使用正则匹配,若目标字符串含特殊字符(如.、*、+),需添加 regex=False 参数避免误解析;
- 替换操作会永久修改原DataFrame,如需保留原始数据,建议先 df_copy = df.copy();
- 若存在大小写混用(如"financial services"),应传入 case=False 并考虑是否需同步 .str.lower() 预处理;
- 分组聚合时,as_index=False 确保分类列保持为普通列而非索引,便于后续操作。
该方法简洁、向量化、性能优异,适用于万级以内数据的快速清洗与归一化,是Pandas文本预处理的经典范式。










