如何基于DataFrame列前缀自动分组,对指定列值求和?
解决按列前缀自动分组求和的问题
没问题,这个需求用Pandas就能轻松实现完全自动化的前缀分组求和,不用手动写一堆startswith判断,咱们一步步来:
核心实现代码(固定前缀长度)
假设你要按前3个字符分组,直接用字符串切片+分组求和就搞定:
import pandas as pd # 你的原始DataFrame df = pd.DataFrame({ 'a': ['foo123', 'foo456', 'bar234', 'bar324'], 'b': [5, 8, 1, 6] }) # 关键步骤:提取前缀+分组求和 result = df.groupby(df['a'].str[:3])['b'].sum().reset_index() # 重命名列名和原表对齐 result.columns = ['a', 'b'] print(result)
运行后输出就是你想要的:
a b 0 bar 7 1 foo 13
代码解释
df['a'].str[:3]:这一步会自动提取a列每个字符串的前3个字符,生成一个和原表行数一致的Series,不管你的前缀是foo还是bar,甚至是其他任意前缀,都会被自动识别为分组依据groupby(...)['b'].sum():用提取出的前缀Series作为分组键,对b列对应的值求和reset_index():把分组后的索引(也就是前缀)转换成普通列,让结果的结构和原表保持一致- 最后重命名列名,确保输出的列名和你期望的
a、b一致
拓展:前缀长度不固定的情况
如果你的a列前缀长度不固定(比如有的是2个字母,有的是3个,后面跟着数字),可以用正则表达式提取前缀部分,实现更灵活的自动分组:
# 提取所有字母作为前缀(假设前缀是纯字母,后面是数字) result = df.groupby(df['a'].str.extract(r'([a-zA-Z]+)', expand=False))['b'].sum().reset_index()
这个方法会自动识别a列里的所有连续字母部分作为分组键,不管长度是多少,都能准确分组求和。
内容的提问来源于stack exchange,提问作者Liquidity
相关产品推荐
相关产品推荐

