2014-10-08 46 views
5

Tôi đã nhìn thấy một vài biến thể về chủ đề phát nổ một cột/chuỗi thành nhiều cột của một khung dữ liệu Pandas, nhưng tôi đã cố gắng làm điều gì đó và không thực sự thành công với các phương pháp hiện có.Giá trị cột gấu trúc cho các cột?

Cho một DataFrame như vậy:

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

Tôi muốn chuyển đổi các mục trong loạt key vào cột, với val giá trị phục vụ như là các giá trị, như vậy:

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

tôi cảm thấy như thế này là một thứ tương đối đơn giản, nhưng tôi đã đập đầu tôi chống lại điều này trong vài giờ với mức độ chập chững tăng lên, và không thành công.

Trả lời

10

Có một vài cách sau:

sử dụng .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 

sử dụng .pivot:

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

sử dụng .groupby Tiếp theo .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! Tôi đã đi xuống con đường thứ ba và bị rối, nhưng tôi không biết có một ẩn dụ hiện tại cho điều này trong toàn bộ khu vực trục. Cảm ơn bạn! –

2

Bạn có thể sử dụng 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 

Hoặc, một đơn giản 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 
Các vấn đề liên quan