2012-11-04 53 views
5

Bazı garip formatta biraz radar verileri var ve pandalar kütüphanesini kullanarak doğru şekilde nasıl döndürülebileceğimi anlayamıyorum.pandalar DataFrame pivoting issue

Benim veriler:

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 
ben şöyle bir DataFrame içine çevirmek istediğiniz

:

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

Ben uğraşırsanız, bir sürü yaptık ama görünmüyor olabilir sözdizimini doğru olarak almak için Herkes yardım edebilir mi?

Teşekkürler!

cevap

5

Burada Pivot yöntemi kullanabilirsiniz:

büyük
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

ah ... iyi hile. Teşekkürler! –

+0

"ReshapeError: Dizin yinelenen girdiler içeriyor, yeniden şekillendiremiyor" sonucunu elde ediyorum. Yerlerimden bazıları, içinde boşluk bulunan dizelerdir, ilgili olabilir mi? –

+0

Ye. Benim için de çalışmıyor. Ben ReshapeError: Dizin yinelenen girdileri içeriyor, yeniden şekillendiremiyor. –

3

veri kaynağınızı varsayarsak bir autoincrement tamsayı dizinini kullanır bu yüzden henüz endeks olarak loc set vermedi

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 

Not csv dosyasında olduğunu. Veri çerçevesi zaten endeks olarak loc kullanıyorsa

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

Ancak, biz loc zamanlı hiyerarşik endeksine sahip olacak şekilde içine time sütun eklemek gerekir. Bu set_index yönteminde yeni append seçeneği kullanılarak yapılabilir. Şunun gibi: - Her iki durumda da

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

, bu senaryoya ulaşmalıdır: -

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 

Umut bu yardımcı olur.

+0

, teşekkürler! Hatam sortlevel(). To_panel() çağrısını kullanmıyordu. Şimdi pandaların dokümanlar bölümünü okuyor ... Tekrar teşekkürler! –

+0

Hoşgeldiniz. Sevindim yardımcı olur! Veri çerçeveniz için otomatik değişim endeksine sahip olmadığınıza dikkat edin. Bu yüzden, '' zaman '' varolan 'konum' dizininize eklerken 'append = True' seçeneğini kullandığınızı önermek için cevabımı düzenledim. –

+1

Belirli bir konum için tüm hızların Seri nesnesini almak istiyorsam, sözdizimi neye benziyor? IE, panelden bir satırı nasıl alabilirim? –