我已经看到了将列/系列扩展为Pandas数据帧的多个列的主题的一些变体,但我一直试图做一些事情而不是真正成功地使用现有的方法。 / p>
给定一个像这样的DataFrame:
key val
id
2 foo oranges
2 bar bananas
2 baz apples
3 foo grapes
3 bar kiwis
我想将key
系列中的项目转换为列,val
值作为值,如下所示:
foo bar baz
id
2 oranges bananas apples
3 grapes kiwis NaN
我觉得这应该是相对简单的事情,但是我现在一直在抨击我的头几个小时,随着卷积水平的提高,并没有成功。
答案 0 :(得分:31)
有几种方法:
使用.pivot_table
:
>>> df.pivot_table(values='val', index=df.index, columns='key', aggfunc='first')
key bar baz foo
id
2 bananas apples oranges
3 kiwis NaN grapes
使用.pivot
:
>>> df.pivot(index=df.index, columns='key')['val']
key bar baz foo
id
2 bananas apples oranges
3 kiwis NaN grapes
>>> df.reset_index().groupby(['id', 'key'])['val'].aggregate('first').unstack()
key bar baz foo
id
2 bananas apples oranges
3 kiwis NaN grapes
答案 1 :(得分:2)
您可以使用set_index
和unstack
In [1923]: df.set_index([df.index, 'key'])['val'].unstack()
Out[1923]:
key bar baz foo
id
2 bananas apples oranges
3 kiwis None grapes
或简化groupby
In [1926]: df.groupby([df.index, 'key'])['val'].first().unstack()
Out[1926]:
key bar baz foo
id
2 bananas apples oranges
3 kiwis None grapes