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

如何将带有多个度量列的宽格式数据集转换为长格式

多度量列宽格式转长格式实现方案

你需要的是带多个值变量的宽格式转长格式操作,可通过以下主流数据处理工具实现,自动适配新增的Z_xxx等同类度量列,无需修改核心逻辑:

Python 基于pandas实现

优先使用pandas 1.1.0及以上版本提供的pivot_longer方法,写法简洁且适配列扩展:

import pandas as pd

# 构造示例宽表数据,实际使用时替换为你的数据集即可
df_wide = pd.DataFrame({
    'ID': ['A', 'B', 'C'],
    'X_1990': [1, 2, 3],
    'X_2000': [4, 5, 6],
    'X_2010': [7, 8, 9],
    'Y_1990': [10, 11, 12],
    'Y_2000': [13, 14, 15],
    'Y_2010': [16, 17, 18]
})

# 核心转换逻辑
df_long = df_wide.pivot_longer(
    index = 'ID', # 保留不动的标识列
    names_to = ('.value', 'Year'), # 按分割顺序,第一部分作为值列名,第二部分作为年份列名
    names_sep = '_' # 列名的分割符
)

如果使用低版本pandas,可替换为wide_to_long实现:

df_long = pd.wide_to_long(
    df_wide,
    stubnames = ['X', 'Y'], # 度量列的前缀,新增Z列时在此处添加'Z'即可
    i = 'ID',
    j = 'Year',
    sep = '_'
).reset_index()

R 基于tidyverse实现

使用tidyr包的pivot_longer方法实现:

library(tidyverse)

# 构造示例宽表数据,实际使用时替换为你的数据集即可
df_wide <- tibble(
    ID = c('A', 'B', 'C'),
    X_1990 = c(1, 2, 3),
    X_2000 = c(4, 5, 6),
    X_2010 = c(7, 8, 9),
    Y_1990 = c(10, 11, 12),
    Y_2000 = c(13, 14, 15),
    Y_2010 = c(16, 17, 18)
)

# 核心转换逻辑
df_long <- df_wide %>% 
  pivot_longer(
    cols = -ID, # 除ID外的所有列参与转换
    names_to = c(".value", "Year"),
    names_sep = "_"
  )

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 03:36:02