将一行转为 Pandas 中的一列

Transpose one row to column in Pandas

考虑以下 table:我对每个 yearage 的每个州都有一些值。

Age Year State1 State2 State3
1 2010 123 456 789
2 2010 111 222 333
1 2011 444 555 666
2 2011 777 888 999

现在我想以这种方式转置 table,使 Year 成为列:

Age State 2010 2011
1 State1 123 444
1 State2 456 555
1 State3 789 666
2 State1 111 777
2 State2 222 888
2 State3 333 999

我无法让它工作,只能转置那个特定的列。

在 Pandas 中实现此目标的好的解决方案是什么?

您要找的是pd.melt

我们可以将其与应用自定义索引和 unstack 的组合一起使用

df1 = pd.melt(df,id_vars=['Year','Age'],var_name=['State'])

out = df1.set_index([df1.groupby(['Year']).cumcount(),'Year','State','Age'])\
                  .unstack('Year').droplevel(0,1).reset_index([1,2])

Year   State  Age  2010  2011
0     State1    1   123   444
1     State1    2   111   777
2     State2    1   456   555
3     State2    2   222   888
4     State3    1   789   666
5     State3    2   333   999

您可以堆叠和取消堆叠您的数据框:

out = (
    df.set_index(["Age", "Year"])
    .stack()
    .unstack("Year")
    .reset_index()
    .rename(columns={"level_1": "State"})
)

Year  Age   State  2010  2011
0       1  State1   123   444
1       1  State2   456   555
2       1  State3   789   666
3       2  State1   111   777
4       2  State2   222   888
5       2  State3   333   999