如何转换宽格式门店数据集为长格式以适配时间序列分析需求?
数据格式转换方案(Python Pandas 实现)
你需要做的是宽格式数据表转长格式数据表,是时间序列预测场景下的标准预处理操作,直接用Pandas内置的melt方法即可实现,完整操作如下:
1. 构造示例原始数据(已有df可直接跳过该步骤)
import pandas as pd df = pd.DataFrame({ 'Date': ['1-1-21', '1-2-21', '1-3-21'], 'store_1': [0.5, 0.3, 0.6], 'store_2': [0.2, 0.7, 0.9], 'store_3': [0.3, 0.1, 0.4] })
2. 执行宽转长操作
# 保留Date列,将所有store_开头的列转为行格式 df1 = df.melt( id_vars="Date", var_name="tmp_store_col", value_name="value" ) # 提取纯数字的门店编号 df1["store number"] = df1["tmp_store_col"].str.extract(r"store_(\d+)").astype(int) # 调整列顺序、删除临时列,得到目标格式 df1 = df1[["Date", "store number", "value"]] # 按门店、日期排序,和示例输出顺序完全一致 df1 = df1.sort_values(by=["store number", "Date"], ignore_index=True)
输出结果验证
打印df1即可得到你需要的格式:
| Date | store number | value |
|---|---|---|
| 1-1-21 | 1 | 0.5 |
| 1-2-21 | 1 | 0.3 |
| 1-3-21 | 1 | 0.6 |
| 1-1-21 | 2 | 0.2 |
| 1-2-21 | 2 | 0.7 |
| 1-3-21 | 2 | 0.9 |
| 1-1-21 | 3 | 0.3 |
| 1-2-21 | 3 | 0.1 |
| 1-3-21 | 3 | 0.4 |
如果使用R语言,可以用tidyr包的pivot_longer方法实现,参考代码:
library(tidyr) library(dplyr) df1 <- df %>% pivot_longer(cols = starts_with("store_"), names_to = "store number", names_prefix = "store_", values_to = "value") %>% arrange(`store number`, Date)
内容的提问来源于stack exchange,提问作者Tonmoy
相关产品推荐
相关产品推荐

