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

如何在Pandas中按指定范围累加时保留Quantity列初始值?

问题:保留Quantity列初始值的同时计算Inventory累加值

原始DataFrame:

Part   Quantity   Inventory
AAA    -1         8
AAA    -1         NaN 
AAA    -5         NaN 
AAA    10         NaN 
AAA    -3         NaN 
BBB    5          8 
BBB    -3         NaN 
BBB    -3         NaN 
BBB    5          NaN 
BBB    -3         NaN

原代码通过修改Quantity列实现Inventory的累加计算,导致每个分组的首个Quantity值被替换为Inventory初始值,丢失了原始数据。要解决这个问题,核心是避免修改原始Quantity列,改用临时列承载计算逻辑:

修改后的代码

# 创建临时列用于计算,保留原始Quantity数据不变
df['_temp_quantity'] = df['Quantity']
# 仅在临时列中替换Inventory非空行的值为对应Inventory初始值
df.loc[~df['Inventory'].isna(), '_temp_quantity'] = df['Inventory']
# 按Inventory非空行的累计出现次数划分计算分组
mask = ~df['Inventory'].isna()
group = mask.cumsum()
# 基于临时列的分组累加结果更新Inventory列
df['Inventory'] = df.groupby(group)['_temp_quantity'].cumsum()
# 清理临时计算列
df.drop('_temp_quantity', axis=1, inplace=True)

运行后结果:

Part   Quantity   Inventory
AAA    -1         8
AAA    -1         7 
AAA    -5         2
AAA    10         12
AAA    -3         9
BBB    5          8 
BBB    -3         5
BBB    -3         2
BBB    5          7
BBB    -3         4

逻辑说明

  • 新增临时列_temp_quantity完全复制原始Quantity数据,所有计算操作仅在临时列上执行,确保原始数据不受影响
  • 仅将临时列中Inventory非空行的值替换为对应Inventory值,作为该分组累加的起始点
  • 按Inventory非空行的累计计数分组,对每个分组的临时列做累加计算,结果直接赋值给Inventory列
  • 计算完成后删除临时列,得到保留原始Quantity的最终结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 19:55:20