在Pandas中将一行转换为一列



考虑下表:每个yearage的每个状态都有一些值。

状态1>444[/tr>>
年龄 年份状态2状态3
1 2010 123 456 789
2 2010 111 222 333
1 2011555666
2 2011777888999

您可以堆叠和卸载数据帧:

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

相关内容

  • 没有找到相关文章

最新更新