Pandas如何将DataFrame的Year列值转为新列、其余列转为行?
Pandas DataFrame 行列转换实现方案
你需要的是典型的长宽表转换操作,可通过以下两种方式实现:
方法1:通用写法(兼容多数值列场景)
通过melt+pivot组合实现,适配任意多列的转换需求:
import pandas as pd # 构造原始示例数据(已有df可跳过该步骤) df = pd.DataFrame({ 'Year': [1, 2, 3], 'Propertyval': [1224000.00, 1248480.00, 1273449.60], 'Cumulative': [24000.00, 48480.00, 73449.60] }) # 先转长表 df_long = df.melt(id_vars='Year', var_name='Desc', value_name='Value') # 再转目标格式宽表 result = df_long.pivot(index='Desc', columns='Year', values='Value')\ .reset_index()\ .rename_axis(columns=None)
方法2:极简写法(适配当前场景)
当前场景只有Year+两个数值列,直接转置即可一步得到结果:
result = df.set_index('Year').T.reset_index(names='Desc').rename_axis(columns=None)
执行后打印result即可得到对应输出:
Desc 1 2 3 0 Propertyval 1224000.0 1248480.0 1273449.6 1 Cumulative 24000.0 48480.0 73449.6
注:你给出的目标结果中Propertyval对应Year=1的取值疑似手误,上述代码保留了原始数据的真实取值,如有特殊修改需求可自行调整对应数值即可。
内容的提问来源于stack exchange,提问作者Jonny
相关产品推荐
相关产品推荐

