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

如何使用Pandas将DataFrame中的列值转换为列标题、原列标题转换为单列值?

Pandas DataFrame 格式转换解决方案

嘿,作为Pandas新手能想到用melt、pivot这些方法已经很棒啦!这个转换其实可以通过**melt(宽转长)+ pivot(长转宽)**的组合来实现,我给你一步步拆解:

首先,先把你的示例数据用Pandas创建出来(方便你直接测试):

import pandas as pd

# 创建原始DataFrame
df = pd.DataFrame({
    "大学编号(University id #)": [1, 1, 1],
    "年份(Year)": [2022, 2022, 2022],
    "财务要素(fin_element)": ["element #1", "element #2", "element #3"],
    "上年(prior_year)": ["$1", "$3", "$2"],
    "本年(current_year)": ["$2", "$5", "$0"]
})

第一步:用melt把「上年」「本年」转成「财务期间」列

这一步是把原来的宽表(有prior_year和current_year两个列)转成长表,让每个期间变成单独的行:

# 执行melt操作
melted_df = df.melt(
    id_vars=["大学编号(University id #)", "年份(Year)", "财务要素(fin_element)"],
    value_vars=["上年(prior_year)", "本年(current_year)"],
    var_name="财务期间(financial_period)",
    value_name="金额"
)
# 把期间列的名称简化成你要的prior_year/current_year
melted_df["财务期间(financial_period)"] = melted_df["财务期间(financial_period)"].str.split("(").str[1].str.split(")").str[0]

执行完这一步,你会得到一个长格式的DataFrame,每一行对应「大学+年份+财务要素+期间+金额」的组合。

第二步:用pivot把「财务要素」转成列

现在我们要把纵向的财务要素变成横向的列,就用pivot:

# 执行pivot操作
result_df = melted_df.pivot(
    index=["大学编号(University id #)", "年份(Year)", "财务期间(financial_period)"],
    columns="财务要素(fin_element)",
    values="金额"
).reset_index()
# 去掉列名的层级(因为pivot后列会有个层级名,这里不需要)
result_df.columns.name = None

最终结果

运行完上面的代码,result_df就是你想要的格式啦:

大学编号(University id #)年份(Year)财务期间(financial_period)element #1element #2element #3
12022prior_year$1$3$2
12022current_year$2$5$0

逻辑总结

简单来说就是两步:

  • 先把横向的期间列转成纵向的行(melt),这样每个期间都能单独成为一行记录
  • 再把纵向的财务要素转成横向的列(pivot),让每个要素成为一个独立的列

这样组合起来就完美匹配你的需求啦,你可以把自己的真实数据替换进去测试哦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 18:47:32