Python 具有多级索引的sawp列

Python 具有多级索引的sawp列,python,pandas,pivot,pivot-table,transpose,Python,Pandas,Pivot,Pivot Table,Transpose,这就是我从csv文件中读取数据时的样子,我使用多级索引(体型和支出)读取数据 我想要的是有一个“年”列,支出中的所有值都应该显示为单独的列。基本上,我想用“年”来交换“支出” 最终数据应该如下所示 我找到了一种方法,但似乎效率不高。我想知道有没有更好更干净的方法?我看到了一些pd.swapaxes()的示例,但无法使其正常工作 以下是我使用的代码: d = [ ["Small Narrowbodies", "TotalExpenses", "2326550.00", "2566989.

这就是我从csv文件中读取数据时的样子,我使用多级索引(体型和支出)读取数据

我想要的是有一个“年”列,支出中的所有值都应该显示为单独的列。基本上,我想用“年”来交换“支出”

最终数据应该如下所示

我找到了一种方法,但似乎效率不高。我想知道有没有更好更干净的方法?我看到了一些pd.swapaxes()的示例,但无法使其正常工作

以下是我使用的代码:

d = [
    ["Small Narrowbodies", "TotalExpenses", "2326550.00", "2566989.00", "2710156.00"],
    ["Small Narrowbodies", "Pilots (000)", "583404.00", "627762.00", "669258.00"],
    [
        "Small Narrowbodies",
        "Salaries and Wages (000)",
        "432613.00",
        "469059.00",
        "515538.00",
    ],
    ["Small Narrowbodies", "Pilot Training (000)", "28235.00", "22388.00", "23838.00"],
    [
        "Small Narrowbodies",
        "Benefits and Payroll Taxes (000)",
        "77752.00",
        "87128.00",
        "77679.00",
    ],
    [
        "Small Narrowbodies",
        "Per Diem/ Personnel (000)",
        "44804.00",
        "49187.00",
        "52203.00",
    ],
    [
        "Small Narrowbodies",
        "Purchased Goods (000)",
        "627471.00",
        "792582.00",
        "772448.00",
    ],
    ["Small Narrowbodies", "Fuel/Oil (000)", "559698.00", "684007.00", "670673.00"],
    ["Small Narrowbodies", "Insurance (000)", "7483.00", "5449.00", "4200.00"],
    [
        "Small Narrowbodies",
        "Other (inc. Tax) (000)",
        "60290.00",
        "103126.00",
        "97575.00",
    ],
]

df = pd.DataFrame(d, columns=["Body_Type", "Spending", "1995", "1996", "1997"])

df2 = df.set_index(["Body_Type", "Spending"])

df3 = df2.transpose().unstack(level=-1).reset_index()

df3.columns = ["Body_Type", "Spending", "Year", "Amount"]

df4 = df3.pivot_table(
    index["Body_Type", "Year"], columns="Spending", values="Amount", aggfunc=np.sum)
这更像是

df=df.unstack(level=0).stack(level=0)

请不要在@Tapaskumarhamanta发布图片…转置并没有什么荒谬之处,它是在转置两个级别的索引。您能提供一些示例数据吗@DataNearoor我能在这里上传文件吗?您可以将数据框重新创建为代码,也可以共享它的文本示例。@DataNearoor我已经用可复制的代码更新了帖子。这会引发此错误“索引包含重复条目,无法重塑”@Tapaskumarhanta df.stack()如何。取消堆栈(级别=1)不,也不行。我希望df.unstack(level=-1)和stack(level=1)可以工作。没有。我认为,当我们删除“支出”时,主体类型在许多行中变得常见,所以它不是唯一的,所以不能用作索引?如果我们能在不拆垛的情况下进行交换,这可能会奏效。