我有一个关于重塑数据帧的问题。在以下示例中:
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
答案 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()
取决于你想要的东西。