2017-05-25 6 views
0

私は反復したいpandasデータフレームを持っています。例えば、私のデータフレームの簡易版になりますPandas DataFrameの一意の値のLineStringを作成します

abc begin end ID  Lat  Long 
def1 001 123 CAT 13.167 52.411 
def2 002 129 DOG 13.685 52.532 
def3 003 145 MOOSE 13.698 52.131 
def1 004 355 CAT 13.220 52.064 
def2 005 361 CAT 13.304 52.121 
def3 006 399 DOG 12.020 52.277 
def1 007 411 MOOSE 13.699 52.549 
def2 008 470 MOOSE 11.011 52.723 

私は、それぞれ固有のIDを反復処理し、マッチング緯度/経度の列からラインストリング(見栄え)を作成したいと思います。

grp = df.groupby('ID') 
for x in grp.groups.items(): 
# this is where I need the most help 

上記の例では、3つの線種を1つの辞書に戻して3回繰り返していきたいと考えています。

{'CAT':LINESTRING (13.167 52.411, 13.22 52.064, 13.304 52.121), 'DOG':LINESTRING (13.685 52.532, 12.02 52.277), 'MOOSE':LINESTRING (13.698 52.131, 12.699 52.549, 13.011 52.723)} 

答えて

1

LINESTRINGパッケージはインストールされていませんが、dの内容を必要な形式に簡単に変換できます。

d = {} 
df.groupby('ID').apply(lambda x: d.update({x.ID.iloc[0]:x[['Lat','Long']].values.tolist()})) 

{'CAT': [[13.167, 52.411], [13.22, 52.064], [13.304, 52.121]], 
'DOG': [[13.685, 52.532], [12.02, 52.277]], 
'MOOSE': [[13.698, 52.131], [13.699, 52.549], [11.011, 52.723]]} 
+0

回答を投稿していただきありがとうございます。私が変更しなければならなかったのは 'd.uptate'を使う代わりに' d.append'を使いました。 – David

+0

これは、あなたの答えでdがdictではなく、リストであったためです。同じ考え。答えにもう一度感謝します。 – David

+1

心配はいりません。それはタイプミスです、私は答えを更新しました。 – Allen

関連する問題