熊猫列值到列?

问题描述:

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

给出一个数据帧像这样:

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 

我觉得这应该是相对简单的事情,但是随着卷积水平的不断提高,我几个小时都在对付这个问题,并且没有成功。

有几种方法:

使用.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:使用.groupby

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

其次.unstack

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

Wunderbar酒吧!我正沿着第三条路走下去,并且纠缠不清,但我不知道在整个枢轴区有一个这样的隐喻。谢谢! – 2014-10-08 12:03:12

你可以使用​​和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