考虑下表:每个year
和age
的每个状态都有一些值。
年龄 | 年份 | 状态1状态2 | >状态3 | ||
---|---|---|---|---|---|
1 | 2010 | 123 | 456 | 789 | |
2 | 2010 | 111 | 222 | 333 | |
1 | 2011 | 444555 | 666 | [/tr>||
2 | 2011 | >777 | 888 | 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
您想要的是pd.melt
我们可以将其与应用自定义索引&拆下
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