如何将列表中的多门店销售DataFrame合并为日期索引、单店单列的DataFrame
解决方案
你完全不需要自己写循环拆分再拼接,直接用pandas内置的pivot_table一行就能实现需求,比你现在写循环的方案简洁高效很多:
import pandas as pd # 直接生成目标格式的DataFrame result = df_sales_shops.pivot_table( index='Date', # 设日期为行索引 columns='Store', # 设门店编号为列名 values='Weekly_Sales', # 填充值取周销售额 aggfunc='sum' # 同一门店同一日期的销售额求和 ) # 若需要调整列名格式为「门店X」,可新增以下代码 result.columns = [f'门店_{col}' for col in result.columns]
基于现有逻辑的修正方案
你现有代码的问题是调用reset_index(drop=True)把日期索引丢弃了,后续拼接时无法对齐日期,很容易出现数据错位。如果要基于你已有的拆分逻辑实现,可参考以下代码:
stores_revenue = [] for store in range(1,46): # 筛选单门店数据 temp = df_sales_shops[df_sales_shops['Store'] == store] # 按日期求和,同时将该列重命名为对应门店名,保留Date为索引 store_sale = temp.groupby('Date')['Weekly_Sales'].sum().rename(f'门店_{store}') stores_revenue.append(store_sale) # 按行索引(日期)拼接所有门店的销售额列 result = pd.concat(stores_revenue, axis=1)
说明
- 以上两种方案都会自动对齐日期索引,不存在不同门店日期错位的问题
- 内置方法经过官方优化,比手动循环效率更高,数据量越大优势越明显
- 代码逻辑简洁,大幅降低出错概率
内容的提问来源于stack exchange,提问作者Rocket
相关产品推荐
相关产品推荐

