5

少し変わった形式のレーダー データがいくつかありますが、pandas ライブラリを使用してそれを正しくピボットする方法がわかりません。

私のデータ:

    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

私は多くのことをいじりましたが、構文を正しくすることができないようです。誰でも助けてもらえますか?

ありがとう!

4

2 に答える 2

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
于 2012-11-04T05:53:01.027 に答える
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まだインデックスとして設定していないので、自動インクリメント整数インデックスを使用していることに注意してください。

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

ただし、データ フレームが既にインデックスとして使用locされている場合は、列を追加しtimeて、loc-time 階層インデックスを作成する必要があります。これは、メソッドの新しいappendオプションを使用して実行できます。set_indexこのような:-

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

お役に立てれば。

于 2012-11-04T05:24:25.860 に答える