Pandas如何计算门店销售数据中各店铺上一次记录的销售额
实现方案
你不需要单独拆分每个门店的临时表再合并,用pandas自带的分组偏移函数就能高效实现,逻辑如下:
- 先把日期列转成datetime类型,避免字符串排序出错
- 按「门店地址」+「销售记录日期」升序排列,保证同个门店的记录按时间先后排序
- 按门店地址分组后,对销售额列使用
shift(1)取上一行的数值,就是该门店上一次被记录的销售额
完整代码
import pandas as pd # 示例数据 df = pd.DataFrame({'Date' : ['01-01-2011','01-01-2011','01-01-2011','01-07-2011','01-07-2011','01-08-2011'], 'Store_Address' : ['1000E, Chicago IL','1000E 67th, Chicago IL','1000 N Central Park Chicago IL', '1000 A Central Park Chicago IL','1000 B Central Park Chicago IL', '1000 C Central Park Chicago IL'], 'Sales': [1000, 2000, 1500, 3000, 2000, 2500]}) # 转换日期格式 df['Date'] = pd.to_datetime(df['Date'], format='%d-%m-%Y') # 按门店+日期排序 df = df.sort_values(by=['Store_Address', 'Date']).reset_index(drop=True) # 生成本次销售的上次销售额列 df['last_record_sales'] = df.groupby('Store_Address')['Sales'].shift(1)
说明
- 首次出现的门店没有上一次销售记录,对应的
last_record_sales会返回NaN,你可以按需用df['last_record_sales'] = df['last_record_sales'].fillna(0)把空值替换成0或者其他默认值 - 如果同一个门店同一天存在多条销售记录,你可以先按日期对同门店的销售额做聚合,再执行上述逻辑;如果需要保留明细记录,可以在排序维度里补充其他唯一标识(比如销售流水号)避免同日期同门店的记录排序混乱
内容的提问来源于stack exchange,提问作者Chee Yuan Ng
相关产品推荐
相关产品推荐

