Skip to main content
 首页 » 编程设计

python之reshape 数据帧/旋转数据帧的一部分

2025年05月04日24zengkefu

我有一个关于 reshape 数据框的问题。在下面的例子中:

df = pd.DataFrame({'name': ['Alfred', 'Alfred', 'Arnaud', 'Arnaud', 'Agrest', 'Agrest'], 
               'year': [2016, 2016, 2017, 2017, 2017, 2017], 
               'category': ['x', 'y', 'x', 'y', 'x', 'y'], 
               'values': [-3, 4,-2, 4,-6,7], 
               'kind': ['M', 'M', 'D', 'D', 'M', 'M']}) 

给出以下数据框。

  category kind    name  values  year 
0        x    M  Alfred      -3  2016 
1        y    M  Alfred       4  2016 
2        x    D  Arnaud      -2  2017 
3        y    D  Arnaud       4  2017 
4        x    M  Agrest      -6  2017 
5        y    M  Agrest       7  2017 

请注意,对于“名称”、“种类”和“年份”的每种组合,我们在“类别”列中都有一个“x”和一个“y”,并且在“值”列中有它们对应的值。

我如何 reshape 数据框,以便我有两个不同的列而不是“类别”列,一个标记为“x”,另一个标记为“y”。我想获得以下输出。

  kind    name  x  y  year 
0    M  Alfred -3  4  2016 
1    D  Arnaud -2  4  2017 
2    M  Agrest -6  7  2017 

请您参考如下方法:

尝试

df.set_index(['name', 'year', 'kind', 'category']).unstack().reset_index() 

你得到

    name        year    kind    values 
    category                    x   y 
0   Agrest      2017    M       -6  7 
1   Alfred      2016    M       -3  4 
2   Arnaud      2017    D       -2  4