2012-11-04 24 views
5

मुझे कुछ रडार डेटा मिला है जो कि एक अजीब प्रारूप में है, और मैं यह नहीं समझ सकता कि पांडा पुस्तकालय का उपयोग करके इसे सही ढंग से कैसे पिटोट किया जाए।पांडा डेटाफ्रेम पिवोटिंग समस्या

मेरे डेटा:

speed time 
loc  
A 63 0000 
B 61 0000 
C 63 0000 
D 65 0000 
A 73 0005 
B 71 0005 
C 73 0005 
D 75 0005 

मैं चालू करने के लिए है कि एक DataFrame कि इस तरह दिखता है में करना चाहते हैं:

0000 0005 
loc  
A 63  73 
B 61  71 
C 63  73 
D 65  75 

मैं लगभग नगण्य का एक बहुत कुछ किया है, लेकिन नहीं कर पा रहे वाक्यविन्यास सही पाने के लिए। क्या कोई मदद कर सकता है?

धन्यवाद!

उत्तर

5

आप यहाँ धुरी विधि का उपयोग कर सकते हैं:

In [71]: df 
Out[71]: 
    speed time 
loc    
A  63  0 
B  61  0 
C  63  0 
D  65  0 
A  73  5 
B  71  5 
C  73  5 
D  75  5 

In [72]: df.reset_index().pivot('loc', 'time', 'speed') 
Out[72]: 
time 0 5 
loc   
A  63 73 
B  61 71 
C  63 73 
D  65 75 
+0

आह ... अच्छी चाल। धन्यवाद! –

+0

मुझे "ReshapeError का परिणाम मिलता है: इंडेक्स में डुप्लिकेट प्रविष्टियां होती हैं, रीशेप नहीं कर सकती"। मेरे कुछ स्थान उनमें रिक्त स्थान के साथ तार हैं, क्या इससे संबंधित हो सकता है? –

+0

ये। मेरे लिए भी काम नहीं करता है। मुझे 'ReshapeError मिलता है: इंडेक्स में डुप्लिकेट प्रविष्टियां होती हैं, फिर भी रीशेप नहीं कर सकती हैं। –

3

आपके डेटा स्रोत मानते हुए, एक csv फ़ाइल में है

from pandas.io.parsers import read_csv 
df = read_csv("radar_data.csv") 

df # shows what is in df 

     loc speed time 
0 A  63  0 
1 B  61  0 
2 C  63  0 
3 D  65  0 
4 A  73  5 
5 B  73  5 
6 C  75  5 
7 D  75  5 
8 A  67  0 
9 B  68  0 
10 C  68  0 
11 D  70  0 

ध्यान दें कि मैं सूचकांक के रूप में loc सेट नहीं किया अभी तक तो यह एक autoincrement पूर्णांक सूचकांक का उपयोग करता है।

panel = df.set_index(['loc', 'time']).sortlevel(0).to_panel() 

हालांकि, यदि आपका डेटा फ्रेम पहले से ही सूचकांक के रूप में loc उपयोग कर रहा है, हम इस पर ध्यान time स्तंभ संलग्न करने के लिए इतना है कि हम एक loc समय hierarchal सूचकांक है की आवश्यकता होगी। यह set_index विधि में नए append विकल्प का उपयोग करके किया जा सकता है। इस तरह: -

panel = df.set_index(['time'], append=True).sortlevel(0).to_panel() 

या तो मामले में, हम इस परिदृश्य पर पहुंचने चाहिए: -

panel # shows what panel is 

<class 'pandas.core.panel.Panel'> 
Dimensions: 1 (items) x 4 (major) x 2 (minor) 
Items: speed to speed 
Major axis: A to D 
Minor axis: 0 to 5 

panel["speed"] # <--- This is what you are looking for. 


time 0 5 
loc   
A  63 67 
B  73 61 
C  68 73 
D  63 68 

आशा इस मदद करता है।

+0

कि महान है, धन्यवाद! मेरी गलती सॉर्टलेवल()। To_panel() कॉल का उपयोग नहीं कर रही थी। पांडा दस्तावेज़ों के उस खंड पर पढ़ना अब ... धन्यवाद फिर से! –

+0

आपका स्वागत है। खुशी है कि यह मदद करता है! ध्यान दें कि आपके डेटाफ्रेम के लिए, आपके पास ऑटोइनक्रिकमेंट इंडेक्स नहीं है। इसलिए मैंने अपने उत्तर को यह सुझाव देने के लिए संपादित किया कि आप अपने मौजूदा 'लोक' इंडेक्स में 'समय' जोड़ते समय 'append = True' विकल्प का उपयोग करें। –

+1

यदि मैं किसी दिए गए स्थान के लिए सभी गतियों का एक श्रृंखला ऑब्जेक्ट प्राप्त करना चाहता था, तो सिंटैक्स कैसा दिखता है? आईई, मैं पैनल से एक पंक्ति कैसे प्राप्त कर सकता हूं? –

संबंधित मुद्दे