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
相关产品推荐
相关产品推荐

