Python 在重复数据消除其他列时旋转数据帧
与类似,我希望透视以下数据帧:Python 在重复数据消除其他列时旋转数据帧,python,pandas,Python,Pandas,与类似,我希望透视以下数据帧: foo extra bar baz 0 one x A 1 1 one x B 2 2 one x C 3 3 two y A 4 4 two y B 5 5 two y C 6 结果应该是 extra A B C one x 1 2 3 two y 4 5 6 这可以用比这更短的方式完成吗 在旋转前拆
foo extra bar baz
0 one x A 1
1 one x B 2
2 one x C 3
3 two y A 4
4 two y B 5
5 two y C 6
结果应该是
extra A B C
one x 1 2 3
two y 4 5 6
这可以用比这更短的方式完成吗
- 在旋转前拆分多余的列
- 分别对其进行重复数据消除
- 是否将其合并回数据透视
df = pd.DataFrame({'foo': ['one','one','one','two','two','two'],
'extra': ['x','x','x','y','y','y'],
'bar': ['A', 'B', 'C', 'A', 'B', 'C'],
'baz': [1, 2, 3, 4, 5, 6]})
您可以使用
pivot\u table
,pivot
只接受一列作为索引、列和值,而pivot\u table
可以接受多列:
df.pivot_table('baz', ['foo', 'extra'], 'bar').reset_index()
#bar foo extra A B C
# 0 one x 1 2 3
# 1 two y 4 5 6
使用
设置索引
和取消堆栈
In [2087]: df.set_index(['foo', 'extra', 'bar'])['baz'].unstack().reset_index()
Out[2087]:
bar foo extra A B C
0 one x 1 2 3
1 two y 4 5 6
注意,对于重复的foo/bar对,这有不同的行为:它聚合baz值,而不是给出错误。很好!要达到所需的结果,必须添加最终的
.set\u索引('foo')
。如果存在重复的foo/bar对,这将保留pivot
命令的错误。