2017-07-13 2 views
1

私は、datetimeフィールド、IDフィールド、および緯度と経度の列を持つpandasデータフレームを持っています。パンダを使用して時系列の緯度経度を補間する方法

  Date        ID   Lat  Lon 
2017-07-03 00:03:43 f2d8c21d593adcb5423127923d63c7b3 39.90459 -75.12544 
2017-07-03 00:06:49 f2d8c21d593adcb5423127923d63c7b3 39.91282 -75.17551 
2017-07-03 00:09:56 f2d8c21d593adcb5423127923d63c7b3 39.93888 -75.19702 
2017-07-03 00:13:03 f2d8c21d593adcb5423127923d63c7b3 39.96759 -75.18911 
2017-07-03 00:16:09 f2d8c21d593adcb5423127923d63c7b3 40.00141 -75.19462 

私のデータフレームには、それぞれ異なるオブジェクトを表す複数のIDがあります。私がしようとしているのは、IDごとに、毎秒の行を追加して日付フィールドの「ギャップ」を埋めるだけでなく、緯度が長いポイントが移動した場所を補間することです。ポイント(地球の曲率を考慮しない)

の間でどのような私がこれまで持っていることは次のとおりです。私はそこに道の一部を取得し

idlist = df['ID'].unique() #create list of all ids 
for x in idlist: 
    temp = df.loc[df['ID']==x] #iterate of smaller sub-dataframe for each ID 
    temp['Date'] = pd.to_datetime(temp['Date']) 
    mindate = temp['Date'].min() 
    maxdate = temp['Date'].max() 
    idx = pd.date_range(mindate, maxdate,freq='s') #create new second index 
    temp = temp.set_index('Date') 
    temp = temp.reindex(idx, fill_value=0) 
    temp.loc[temp['ID']==0, 'TripID'] = x 
    print(temp) 
    break 

           TripID  Lat  Lon 
2017-07-03 00:03:43 f2d8c21d593adcb5423127923d63c7b3 39.90459 -75.12544 
2017-07-03 00:03:44 f2d8c21d593adcb5423127923d63c7b3 0.00000 0.00000 
2017-07-03 00:03:45 f2d8c21d593adcb5423127923d63c7b3 0.00000 0.00000 
2017-07-03 00:03:46 f2d8c21d593adcb5423127923d63c7b3 0.00000 0.00000 
2017-07-03 00:03:47 f2d8c21d593adcb5423127923d63c7b3 0.00000 0.00000 
... 
2017-07-03 00:16:08 f2d8c21d593adcb5423127923d63c7b3 0.00000 0.00000 
2017-07-03 00:16:09 f2d8c21d593adcb5423127923d63c7b3 40.00141 -75.19462 

私はIDは私がのためのデータを持っている点の間の直線的に動くように見えるように、彼らは0に等しい緯度と経度の位置に記入する方法を考え出す必要があります。

これは私が確信している部分です。どんな洞察も役に立ちます。 これを行う方法が分かれば、完成したすべての一時データフレームを出力に追加できます。

答えて

0

私はあなたが方法.ffill()を探していると信じています。データを準備するには、data['Lat']data['Lon']の値をNAに設定して、値を転送可能にする必要があります。

data.loc[data['Lat'] == 0, 'Lat'] = None 
data.loc[data['Lon'] == 0, 'Lon'] = None #fill NA where equal to zero 

data['Lat'] = data['Lat'].ffill() 
data['Lon'] = data['Lon'].ffill() #conversly, data['Lon'].fillna(method = 'ffill') should work 

これは、望ましい出力を与えるはずです。質問を誤解した場合は、コメントしてください。 pandas APIについては、https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.fillna.htmlを参照してください。

+0

申し訳ありません申し訳ありませんが私は自分自身を明確にしませんでした。私が探しているのは、IDが2つの既知の場所の間を移動しているかのように、入力されたNA値です。 2つのポイントの中間点の中間点も地理的に半分にする必要があります。 –

関連する問題