如何标准化Name列后用pandas groupby求和合并重复项?
清理DataFrame中Name列冗余内容后实现分组求和
先看示例场景,假设你的原始DataFrame是这样的:
import pandas as pd df = pd.DataFrame({ 'Name': ['Michael', 'Michael ()', 'Sarah', 'Sarah - (0)'], 'Fee': [3, 4, 6, 4] })
直接用groupby('Name')会因为名称后缀的差异导致分组失败,核心解决思路是先清理Name列的冗余后缀,再进行分组求和。
步骤1:清理Name列
用正则表达式匹配并移除名称后面的冗余内容(空格、括号、短横线及后续字符):
# 移除空格及之后的所有冗余,得到干净的名称 df['Cleaned_Name'] = df['Name'].str.replace(r'\s.*', '', regex=True)
如果遇到不带空格的冗余(比如Michael(0)、Sarah-1),可以用更通用的正则覆盖这类场景:
# 匹配短横线、空格、左括号开头的后续内容并移除 df['Cleaned_Name'] = df['Name'].str.replace(r'[-\s(].*', '', regex=True)
步骤2:分组求和
基于清理后的列分组计算Fee总和,还可以重命名列还原成原名称:
# 分组求和 df2 = df.groupby('Cleaned_Name')['Fee'].sum().reset_index() # 重命名列名 df2 = df2.rename(columns={'Cleaned_Name': 'Name'})
最终得到的结果就是你预期的:
Name Fee 0 Michael 7 1 Sarah 10
内容的提问来源于stack exchange,提问作者PurpleCops
相关产品推荐
相关产品推荐

