Pandas如何基于门店编号列将销售额列拆分为各门店独立列?
解决方案
你要实现的长表转宽表需求,Pandas有内置的透视功能可以直接完成,不需要手动循环处理单个门店。
前置准备
先把日期列转换为标准日期格式,避免后续时间序列建模和排序出现异常:
import pandas as pd # 按照你数据里的%d%b%Y格式解析日期 df['date'] = pd.to_datetime(df['date'], format='%d%b%Y')
方法1:pivot方法(单门店单日期无重复记录时推荐)
一行代码即可完成结构转换:
wide_df = df.pivot(index='date', columns='Store_num', values='Sales') # 重命名列名,匹配你需要的「门店编号_sales」格式 wide_df.columns = [f'{store}_sales' for store in wide_df.columns] # 如果需要把date从索引转为普通列,添加下面这行 wide_df = wide_df.reset_index()
缺失的门店销售额会自动填充NaN,完全符合你的要求。
方法2:pivot_table方法(存在同门店同日期多条记录时推荐)
如果你的原始数据里存在同一个门店同一个日期有多条销售额记录,可以用pivot_table指定聚合规则:
wide_df = df.pivot_table( index='date', columns='Store_num', values='Sales', aggfunc='sum' # 聚合规则可按需替换为'mean'、'max'、'first'等 ) # 后续重命名、重置索引逻辑和方法1完全一致 wide_df.columns = [f'{store}_sales' for store in wide_df.columns] wide_df = wide_df.reset_index()
原思路问题说明
你之前手动筛选单个门店的思路逻辑上是可行的,但效率很低,且需要自己处理日期对齐、合并的逻辑,非常容易出错。Pandas的透视方法已经封装了所有对齐、填充缺失值的逻辑,100家门店的规模可以毫秒级完成转换。
内容的提问来源于stack exchange,提问作者Tom
相关产品推荐
相关产品推荐

