如何移除数据日期分组 实现年月交叉宽表转长表(Excel/Python)
宽表转年月长表格式实现方案
这是典型的宽表逆透视转长表需求,用Excel自带功能或者Python脚本都能快速实现,也支持批量处理多份同结构数据集。
方法一:Excel 可视化操作
无需写复杂公式,操作一次即可复用规则批量处理:
- 选中原始数据全部区域(包含表头),点击顶部菜单栏「数据」选项卡下的「从表格/区域」,将数据加载到Power Query编辑器。
- 选中
Year(年份)列,右键点击选择「逆透视其他列」,操作后原横向排列的月份列会自动拆为两列:一列为月份标识(属性列),一列为对应年月的数值(值列)。 - 新增自定义列,把年份字段和转换为两位数字的月份字段拼接为
YYYY-MM格式:如果表头是Jan(1月)这类带标注的格式,直接用替换规则把英文月份映射为对应数字即可。 - 删除原有年份列、月份属性列,把自定义列重命名为
Date(日期),数值列重命名为Number(数值),调整列顺序后点击「关闭并上载」就能得到目标格式的表。 - 后续处理同结构文件时,只需要替换当前查询的数据源路径,点击刷新就能一键生成结果,不需要重复操作。
方法二:Python 批量处理方案
用pandas库处理效率更高,适合几十上百份文件的批量清洗场景:
- 先安装依赖库,在终端执行命令:
pip install pandas openpyxl - 单文件转换参考代码:
import pandas as pd # 月份映射表,key和你原始表的月份表头保持一致即可 month_map = { "Jan(1月)": "01", "Feb(2月)": "02", "Mar(3月)": "03", "Apr(4月)": "04", "May(5月)": "05", "Jun(6月)": "06", "Jul(7月)": "07", "Aug(8月)": "08", "Sep(9月)": "09", "Oct(10月)": "10", "Nov(11月)": "11", "Dec(12月)": "12" } # 读取原始数据,csv格式文件换用pd.read_csv即可 df = pd.read_excel("你的原始数据文件路径.xlsx") # 逆透视转换:保留年份列,其余月份列转为长表结构 df_long = df.melt(id_vars="Year(年份)", var_name="month_col", value_name="Number(数值)") # 拼接生成标准年月日期列 df_long["Date(日期)"] = df_long["Year(年份)"].astype(str) + "-" + df_long["month_col"].map(month_map) # 整理输出列顺序 result = df_long[["Date(日期)", "Number(数值)"]] # 导出转换结果 result.to_excel("转换完成的结果.xlsx", index=False)
- 批量处理多份文件时,只需要增加文件夹遍历逻辑,循环读取每个文件套用上述转换规则,最终可以选择把所有结果合并为一张表,或者按原文件名单独导出。
内容的提问来源于stack exchange,提问作者Ctw Quad
相关产品推荐
相关产品推荐

