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

基于Pandas DataFrame按GROUP列(忽略末尾H)生成CAL求和列

解决Pandas中按GROUP前缀(去除末尾H)求和生成CAL列的问题

这问题我之前也碰到过,用分组加映射的方式就能轻松解决,来看具体步骤:

完整实现代码

import pandas as pd

# 构造示例DataFrame
df = pd.DataFrame({'ORDER':["A", "A", "A", "B", "B","B"], 
                   'GROUP': ["A_2018_1B1", "A_2018_1B1H", "A_2018_1M1", "B_2018_I000_1C1", "B_2018_I000_1B1", "B_2018_I000_1C1H"], 
                   'VAL':[1,3,8,5,8,10]})

# 生成匹配分组的key:移除GROUP末尾可能的'H'字符
df['group_key'] = df['GROUP'].apply(lambda x: x[:-1] if x.endswith('H') else x)

# 按分组key求和,再映射回原DataFrame得到CAL列
df['CAL'] = df['group_key'].map(df.groupby('group_key')['VAL'].sum())

# 可选:删除中间生成的group_key列
df = df.drop('group_key', axis=1)

print(df)

代码解释

  1. 生成分组Key:通过apply和lambda函数处理GROUP列,将所有以H结尾的字符串去掉最后一位,这样A_2018_1B1和A_2018_1B1H会被归为同一个分组Key,B_2018_I000_1C1和B_2018_I000_1C1H同理。
  2. 分组求和映射:先按group_key分组对VAL列求和,得到每个分组的总和,再用map方法把这个总和对应到每一行,就生成了需要的CAL列。
  3. 清理中间列:如果不需要中间的group_key列,用drop方法删掉即可。

输出结果

序号ORDERGROUPVALCAL
0AA_2018_1B114
1AA_2018_1B1H34
2AA_2018_1M188
3BB_2018_I000_1C1515
4BB_2018_I000_1B188
5BB_2018_I000_1C1H1015

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 12:17:48