Pandas列值到列?

Ida*_*zit 31 python pandas

我已经看到了将一个列/系列爆炸成Pandas数据帧的多个列的主题的一些变化,但我一直在尝试做一些事情而不是真正成功地使用现有的方法.

给定一个像这样的DataFrame:

    key       val
id
2   foo   oranges
2   bar   bananas
2   baz    apples
3   foo    grapes
3   bar     kiwis
Run Code Online (Sandbox Code Playgroud)

我想将key系列中的项目转换为列,并将val值作为值,如下所示:

        foo        bar        baz
id
2   oranges    bananas     apples
3    grapes      kiwis        NaN
Run Code Online (Sandbox Code Playgroud)

我觉得这应该是相对简单的事情,但是我现在一直在抨击我的头几个小时,随着卷积水平的提高,并没有成功.

beh*_*uri 40

有几种方法:

使用.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
Run Code Online (Sandbox Code Playgroud)

使用.pivot:

>>> df.pivot(index=df.index, columns='key')['val']
key      bar     baz      foo
id                           
2    bananas  apples  oranges
3      kiwis     NaN   grapes
Run Code Online (Sandbox Code Playgroud)

使用.groupby后跟.unstack:

>>> df.reset_index().groupby(['id', 'key'])['val'].aggregate('first').unstack()
key      bar     baz      foo
id                           
2    bananas  apples  oranges
3      kiwis     NaN   grapes
Run Code Online (Sandbox Code Playgroud)


Zer*_*ero 6

你可以使用set_indexunstack

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
Run Code Online (Sandbox Code Playgroud)

或者,一个简化的 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
Run Code Online (Sandbox Code Playgroud)