You need to enable JavaScript to run this app. pandas如何按分组排序后基于同列历史值计算剩余数量新列
优惠活动
大模型
产品
解决方案
定价
更多

pandas如何按分组排序后基于同列历史值计算剩余数量新列

实现代码

import pandas as pd

# 原始数据
dict1 = {'name':['name1','name1','name1','name1','name2','name2','name2'],
         'Totalqty':[30000,30000,30000,30000,18000,18000,18000],
         'fillqty':[5000,15000,5000,5000,3000,6000,9000],
         'date':['2021-01-20','2021-01-22','2021-01-21','2021-01-23','2021-01-22','2021-01-21','2021-01-23']}
df = pd.DataFrame(dict1)

# 步骤1:将date列转为日期格式,避免字符串排序出错
df['date'] = pd.to_datetime(df['date'])
# 步骤2:按名称、日期升序排序
df = df.sort_values(by=['name', 'date'], ignore_index=True)
# 步骤3:分组计算累计fillqty,用总数量减去累计值得到剩余量
df['remaining'] = df['Totalqty'] - df.groupby('name')['fillqty'].cumsum()

# 输出结果
print(df)

逻辑说明

你之前的写法是直接用总数量减去当日填充量,没有累加历史填充量,所以不符合需求。本次实现逻辑完全匹配要求:

  • 先对每个name分组内的数据按日期升序排列,保证计算顺序正确
  • 用cumsum()对分组内的fillqty做累计求和,得到截止到当日的总填充量
  • 用总库存Totalqty减去累计填充量,直接得到当日剩余库存,无需逐行递推计算前一日剩余

运行后输出结果和你给出的预期完全一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 11:36:08