重塑数据框/透视数据帧的切片

时间:2017-04-26 17:36:06

标签: python pandas

我有一个关于重塑数据帧的问题。在以下示例中:

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

请注意,对于'name','kind'和'year'的每个组合,我们在'category'列中有一个'x'和一个'y',以及'values'列中的相应值。< / p>

如何重塑数据框,以便我有两个不同的列,而不是“类别”列,一个标记为“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

2 个答案:

答案 0 :(得分:4)

尝试

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

答案 1 :(得分:1)

A-Za-z的答案肯定有效但可能有点神秘。这是一个替代方案:

df.pivot_table(values='values',index=['kind','name','year'],columns='category').reset_index()

或者甚至可能没有.reset_index()取决于你想要的东西。