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

如何重排Pandas DataFrame:将年份列转为行、var字段转为新列

实现思路与代码

你的需求可以通过Pandas的「长/宽格式转换」两步完成,逻辑清晰好理解,适合初学者掌握:

  1. 先把原始表中横向排布的Yr1、Yr2、Yr3列转为纵向行,提取年份数字
  2. 再把var列的v1、v2、v3取值转为横向列,即可得到目标结构
完整可运行代码
import pandas as pd

# 原始DataFrame
d = {'name': ['a', 'a','a','b','b','b'],
     'var': ['v1', 'v2', 'v3', 'v1', 'v2', 'v3'],
     'Yr1': [11, 21, 31, 41, 51, 61],
     'Yr2': [12, 22, 32, 42, 52, 62],
     'Yr3': [13, 23, 33, 43, 53, 63]}
df = pd.DataFrame(d)

# 第一步:把Yr开头的列从宽格式转为长格式,提取年份数字
df_melted = df.melt(id_vars=['name', 'var'], var_name='Yr', value_name='val')
df_melted['Yr'] = df_melted['Yr'].str.replace('Yr', '').astype(int)

# 第二步:把var列的v1/v2/v3转为独立列,得到目标结构
df_result = df_melted.pivot(index=['name', 'Yr'], columns='var', values='val').reset_index()

# 清除列名标记,输出更整洁
df_result.columns.name = None

print(df_result)
代码说明
  • melt:保留name、var两列不动,把所有Yr开头的列转为纵向排布,原列名存入Yr列,原单元格值存入val列
  • 替换Yr前缀:把Yr1、Yr2转换为纯数字1、2、3,匹配目标表的Yr列格式
  • pivot:以name和Yr为分组依据,把var列的不同取值转为独立列,对应值填充到对应单元格中
  • reset_index:把name、Yr从索引变回普通列,得到最终符合要求的表结构

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 19:15:05