首页 > 解决方案 > 通过 Python 中的两个变量将面板数据宽转换为长

问题描述

我有一个 Python 数据集,我试图从这样的广泛数据集转换:

ID 姓名 2007年 2008年
1 安迪 324 412
2 贝基 123 422
3 莉齐 332 564

对于这样的长数据集。

ID 姓名 变量
1 安迪 2007年 324
1 安迪 2008年 412
2 贝基 2007年 123
2 贝基 2008年 422
3 莉齐 2007年 332
3 莉齐 2008年 564

不幸的是,由于每年有两个标识列和多个观察值,因此无法使用数据透视。任何帮助将非常感激。

标签: pythonpandas

解决方案


不能使用pivot,因为这实际上是一个melt操作:

out = (df.melt(
            id_vars=["ID", "Name"], 
            value_vars=["2007", "2008"], 
            var_name="Year", 
            value_name="Var"
        )
        .sort_values(["ID", "Year"]))

print(out)
   ID    Name  Year  Var
0   1    Andy  2007  324
3   1    Andy  2008  412
1   2   Becky  2007  123
4   2   Becky  2008  422
2   3  Lizzie  2007  332
5   3  Lizzie  2008  564

推荐阅读