2014-10-08 40 views
5

Bir sütun/seriyi bir Panda'nın veri çerçevesinin birden çok sütununa ayırma temasında birkaç varyasyon gördüm, ancak bir şey yapmaya çalışıyorum ve mevcut yaklaşımlarla gerçekten başarılı olmaya çalışmıyorum.Pandalar sütun değerlerini sütunlara mı?

şöyle bir DataFrame Verilen:

key  val 
id 
2 foo oranges 
2 bar bananas 
2 baz apples 
3 foo grapes 
3 bar  kiwis 

Ben sütunlar halinde key serisinde öğeleri dönüştürmek istediğiniz, val değerleri şöyle, değerleri olarak hizmet veren:

 foo  bar  baz 
id 
2 oranges bananas  apples 
3 grapes  kiwis  NaN 

I Bunun nispeten basit olması gereken bir şey olduğunu düşünürüm, ama birkaç saat boyunca kafamı başımdan çektim.

cevap

10

birkaç yolu vardır:

.pivot_table kullanarak:

>>> 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 kullanarak: .groupby kullanarak

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

.unstack ardından:

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

WunderBar! Üçüncü yoldan aşağı iniyordum ve karışıyordum, ama tüm pivot alanda bunun için mevcut bir metafor olduğunu hiç bilmiyordum. Teşekkür ederim! –

2

ve

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 

Ya unstack, bir

groupby basitleştirilmiş
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 
İlgili konular