我已经看到了将一个列/系列爆炸成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)
>>> 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)
你可以使用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
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)
| 归档时间: |
|
| 查看次数: |
17071 次 |
| 最近记录: |