基于col1列值出现次数为value列累加指定常量的实现需求
Pandas实现按分组累加指定常量
初始数据
给定初始DataFrame:
import pandas as pd df = pd.DataFrame({'col1':['x','x','x','x','x','y','y','y','y','y','y','y'], 'value':[0,0,0,0,0,0,0,0,0,0,0,0]})
需求说明
需要对value列进行累加更新:
- 每出现一次
x,value从0开始累加100 - 每出现一次
y,value从x分组的最终累加值继续累加150
最终实现逐行递增的累计结果。
解决方案
方法一:替换映射后直接累计求和
这是最简洁的实现方式,先将col1的取值替换为对应常量,再计算累计和:
# 定义取值与常量的映射关系 const_map = {'x': 100, 'y': 150} # 替换后计算累计和 df['value'] = df['col1'].map(const_map).cumsum()
方法二:分组序号计算后累加
如果需要更清晰地展示分组内的计数逻辑,可以用groupby.cumcount获取分组内的行号,再计算对应值后累计:
const_map = {'x': 100, 'y': 150} # 先获取每个分组内的行索引(从0开始),加1后乘以对应常量,再累计求和 df['value'] = (df.groupby('col1').cumcount() + 1) * df['col1'].map(const_map) df['value'] = df['value'].cumsum()
最终效果
执行上述代码后,value列的结果为:[100, 200, 300, 400, 500, 650, 800, 950, 1100, 1250, 1400, 1550],完全符合需求。
内容的提问来源于stack exchange,提问作者frank
相关产品推荐
相关产品推荐

