2012-11-04 19 views
5

私はちょっと奇妙なフォーマットのレーダーデータを持っていますが、パンダライブラリーを使って正確にピボットする方法はわかりません。pandas DataFrame pivoting issue

マイデータ:私の周りいじるの多くを行ってきたが、見えることはできません

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

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にその電源を入れたいのですが正しい構文を取得します。誰でも助けてくれますか?

ありがとうございます!

答えて

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:Indexに重複したエントリが含まれており、再形成できません"という結果が表示されます。私の場所の中にはスペースが入った文字列があります。 –

+0

はい。私のためにも働かない。私は 'ReshapeError:Indexに重複したエントリが含まれていて、再形成できません 'というメッセージが表示されます。 –

3

それは自動インクリメント整数のインデックスを使用していますので、私はまだインデックスとしてlocを設定しなかった注

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 

、データソースは、csvファイルであると仮定。

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

あなたのデータフレームは、すでにインデックスとしてlocを使用している場合は、我々はLOC-時間階層のインデックスを持つようにそれにtime列を追加する必要があります。これは、​​メソッドの新しい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

、感謝を!私の間違いは、sortlevel()。to_panel()呼び出しを使用していないことでした。今、パンダのドキュメントのその部分を読んで...もう一度ありがとう! –

+0

ようこそうれしい!データフレームでは、自動インクリメントインデックスはありません。だから私はあなたの既存の 'loc'インデックスに '時間'を追加しながら 'append = True'オプションを使うことを提案する答えを編集しました。 –

+1

与えられた場所のすべての速度のSeriesオブジェクトを取得したい場合、構文はどのように見えますか? IEでは、パネルから行を取得するにはどうすればよいですか? –

関連する問題