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

如何将含年份后缀的宽格式数据转换为ID-年份对的长格式?

这确实是处理结构化数据时很常见的需求——把宽表转成更适合分析的长表,手动处理大数据量完全不现实,下面给你几个不同工具的解决方案,按需选择就行:

用Excel Power Query实现(无需编程,适合非技术用户)

如果日常用Excel处理数据,Power Query是最方便的可视化工具:

  • 选中你的数据区域,点击「数据」选项卡 → 「从表格/区域」,确认数据包含表头
  • 在Power Query编辑器中,先选中A1、A2列,右键选择「逆透视列」→ 「仅逆透视所选列」
  • 对B1、B2列重复同样的逆透视操作
  • 此时会生成两列带属性名的列(比如Attribute和Attribute.1),添加自定义列提取年份:用公式Text.End([Attribute],1)得到年份数字,对另一列做同样操作,验证两个年份列值一致(因为A、B年份数量相同)
  • 将Value列重命名为A,Value.1列重命名为B,删除原来的Attribute和Attribute.1列
  • 把年份列转成数字类型,调整列顺序为ID、year、A、B、C,最后关闭并上载到Excel即可

用Python Pandas实现(编程方案,适合自动化/大数据量)

如果会Python,用Pandas的wide_to_long方法可以一步完成转换,非常高效:

import pandas as pd

# 模拟你的数据,实际可通过pd.read_excel/pd.read_csv读取真实数据
df = pd.DataFrame({
    'ID': [1, 2],
    'A1': [0, 5],
    'A2': [1, 6],
    'B1': [2, 7],
    'B2': [3, 8],
    'C': [4, 9]
})

# 核心转换:指定前缀(A/B)、索引列(ID)、年份列(year)
long_df = pd.wide_to_long(df, stubnames=['A', 'B'], i='ID', j='year', sep='', suffix=r'\d+')

# 重置索引并调整列顺序匹配目标格式
long_df = long_df.reset_index()[['ID', 'year', 'A', 'B', 'C']]

print(long_df)

运行后会直接输出你想要的长格式数据,后续还能批量处理多份同类数据。

用R tidyverse实现(统计分析场景常用)

如果用R做数据分析,pivot_longer可以灵活处理这类带后缀的列名:

library(tidyverse)

# 模拟数据
df <- tibble(
  ID = c(1, 2),
  A1 = c(0, 5),
  A2 = c(1, 6),
  B1 = c(2, 7),
  B2 = c(3, 8),
  C = c(4, 9)
)

# 正则匹配拆分列名,直接转成目标格式
long_df <- df %>%
  pivot_longer(
    cols = starts_with(c("A", "B")),
    names_to = c(".value", "year"),
    names_pattern = "(\\w)(\\d)"  # 匹配字母前缀+数字后缀
  ) %>%
  select(ID, year, A, B, C)

print(long_df)

内容的提问来源于stack exchange,提问作者user42459

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:30:16