2017-01-25 43 views
6

Tôi có Python gấu trúc dataframe sau:Chuyển đổi hàng để cột bằng Python Pandas

 fruits | numFruits 
--------------------- 
0 | apples | 10 
1 | grapes | 20 
2 | figs | 15 

Tôi muốn:

    apples | grapes | figs 
----------------------------------------- 
Market 1 Order | 10 | 20 | 15 

tôi đã xem xét trục(), pivot_table(), Transpose và unstack() và không ai trong số họ dường như cho tôi điều này. Pandas newbie, vì vậy tất cả giúp đánh giá cao.

+0

Nếu bạn quan tâm đến sự khác biệt về hiệu suất, hãy kiểm tra [câu hỏi này] (http://stackoverflow.com/questions/41862406/performance-of-creating-new-dataframe) – jezrael

Trả lời

10

Bạn cần set_index với transpose bởi T:

print (df.set_index('fruits').T) 
fruits  apples grapes figs 
numFruits  10  20 15 

Nếu cần đổi tên cột, nó là một chút phức tạp:

print (df.rename(columns={'numFruits':'Market 1 Order'}) 
     .set_index('fruits') 
     .rename_axis(None).T) 
       apples grapes figs 
Market 1 Order  10  20 15 

Một giải pháp nhanh hơn là sử dụng numpy.ndarray.reshape:

print (pd.DataFrame(df.numFruits.values.reshape(1,-1), 
        index=['Market 1 Order'], 
        columns=df.fruits.values)) 

       apples grapes figs 
Market 1 Order  10  20 15 

Timi NGS:

#[30000 rows x 2 columns] 
df = pd.concat([df]*10000).reset_index(drop=True)  
print (df) 


In [55]: %timeit (pd.DataFrame([df.numFruits.values], ['Market 1 Order'], df.fruits.values)) 
1 loop, best of 3: 2.4 s per loop 

In [56]: %timeit (pd.DataFrame(df.numFruits.values.reshape(1,-1), index=['Market 1 Order'], columns=df.fruits.values)) 
The slowest run took 5.64 times longer than the fastest. This could mean that an intermediate result is being cached. 
1000 loops, best of 3: 424 µs per loop 

In [57]: %timeit (df.rename(columns={'numFruits':'Market 1 Order'}).set_index('fruits').rename_axis(None).T) 
100 loops, best of 3: 1.94 ms per loop 
+0

Xin chào ... Trong câu hỏi này chỉ có 3 cột gì Nếu chúng ta có 10 cột và chúng ta cần giữ lại 8 cột và chỉ sử dụng 2 cột khác để định hình lại dữ liệu? –

+0

Có vẻ như bạn cần ['pivot_table'] (http://pandas.pydata.org/pandas-docs/stable/generated/pandas.pivot_table.html), nhưng không có câu trả lời dữ liệu cứng. Có lẽ tốt nhất là tạo câu hỏi mới với dữ liệu mẫu, đầu ra mong muốn và bạn thử gì (mã của bạn) – jezrael

+0

Tôi vừa tạo một câu hỏi mới, vui lòng xem lại. –

7
pd.DataFrame([df.numFruits.values], ['Market 1 Order'], df.fruits.values) 

       apples grapes figs 
Market 1 Order  10  20 15 

Tham khảo nâng cao jezrael của khái niệm này. df.numFruits.values.reshape(1, -1) hiệu quả hơn.

+0

@jezrael đó là tôi bị cẩu thả. Overhead cho gấu trúc tìm ra rằng tôi đã có một danh sách các mảng. Vì vậy, đơn giản hơn nhiều để cung cấp cho nó mảng 2-D ở vị trí đầu tiên như bạn đã làm. – piRSquared

+0

@jezrael Khái niệm giống nhau. Tôi sẽ chỉnh sửa câu trả lời của tôi để trỏ đến bản cập nhật của bạn. – piRSquared

+0

@ jezrael nữa, tôi nghĩ rằng chi phí là nhỏ đối với mảng lớn hơn ... có lẽ – piRSquared

Các vấn đề liên quan