You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中按日期将列转换为行(宽表转长表)

宽表转长表的实现方法

针对你需要将包含分组前缀的宽表转换为长表的需求,以下是几种可行的实现方式:

1. Excel/Power Query(无需编程)

  1. 将原数据导入Excel,选中数据区域,点击「数据」选项卡中的「从表格/区域」,进入Power Query编辑器。
  2. 复制当前查询(避免修改原数据),分别处理AA和BB分组:
    • 对于AA分组:保留Date和所有以AA_开头的列,添加自定义列Data并赋值为"AA",然后将所有AA_开头的列重命名,去掉前缀(比如AA_ZZ_CR改为ZZ_CR)。
    • 对于BB分组:重复上述操作,保留Date和BB_开头的列,自定义列Data赋值为"BB",重命名列去掉BB_前缀。
  3. 将两个处理后的查询合并(点击「追加查询」→「追加两个表」),最后关闭并上载到Excel即可。

2. Python pandas(编程实现)

使用pandas的wide_to_long函数可以快速实现这种带前缀的宽表转长表:

import pandas as pd

# 读取原数据(假设数据存储在csv文件中,也可直接传入DataFrame)
df = pd.read_csv("your_data.csv")

# 转换格式
result = pd.wide_to_long(
    df,
    stubnames=["ZZ_CR", "ZZ_BT", "XX_CR", "XX_BT"],
    i="Date",
    j="Data",
    sep="_",
    suffix=r"\w+"
).reset_index()

# 查看结果
print(result)

该函数会自动根据列名的前缀(AA/BB)拆分出Data列,并将对应后缀的列对齐。

3. SQL(数据库场景)

如果数据存储在数据库中,可以通过UNION ALL将AA和BB的行分别查询后合并:

SELECT 
    Date,
    'AA' AS Data,
    AA_ZZ_CR AS ZZ_CR,
    AA_ZZ_BT AS ZZ_BT,
    AA_XX_CR AS XX_CR,
    AA_XX_BT AS XX_BT
FROM your_table
UNION ALL
SELECT 
    Date,
    'BB' AS Data,
    BB_ZZ_CR AS ZZ_CR,
    BB_ZZ_BT AS ZZ_BT,
    BB_XX_CR AS XX_CR,
    BB_XX_BT AS XX_BT
FROM your_table
ORDER BY Date, Data;

执行该SQL语句后,即可得到目标格式的结果。

内容的提问来源于stack exchange,提问作者Divyansh Kumar Singh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 19:02:51