2012-09-07 54 views
4

我對Pandas非常陌生,但熟悉Numpy和Python。如果我有一個由時間(日期時間)索引的X,Y點(float64)的`Pandas.DataFrame',我怎麼能從pythonically計算速度,提供我已經知道如何計算點之間的歐氏距離?從Pandas.DataFrame中的時間戳位置計算速度

編輯:我剛剛閱讀了關於pandas.Series.diff()的幫助,但仍想用其他函數「用'euclidean_distance()'替換diff上使用的減法。有沒有辦法做到這一點?

數據框的樣子(指數在第一列,排在第二位):

2009-08-07 16:16:44 [37.800185, -122.426361] 
2009-08-07 16:16:48 [37.800214, -122.426153] 
2009-08-07 16:16:49 [37.800222, -122.426118] 
2009-08-07 16:16:52 [37.800197, -122.426072] 
2009-08-07 16:17:32 [37.800214, -122.425903] 
2009-08-07 16:17:34 [37.800236, -122.425826] 
2009-08-07 16:17:40 [37.800282, -122.425534] 
2009-08-07 16:17:44 [37.800307, -122.425315] 
2009-08-07 16:17:46 [37.800324, -122.425207] 
2009-08-07 16:17:47 [37.800331, -122.425153] 
2009-08-07 16:17:49 [37.800343, -122.425047] 
2009-08-07 16:17:50 [37.800355, -122.424994] 
2009-08-07 16:17:51 [37.800362, -122.424942] 
2009-08-07 16:17:54 [37.800378, -122.424796] 
2009-08-07 16:17:56 [37.800357, -122.424764] 

我想是某種方式來獲得從速度,提供了第一個數據樣本的速度總是會被定義爲零(從以前的樣本中沒有已知的timedelta)。

非常感謝!

回答

4

會這樣的工作?

In [99]: df 
Out[99]: 
          X   Y 
2009-08-07 00:00:00 -0.900602 -1.107547 
2009-08-07 01:00:00 0.398914 1.545534 
2009-08-07 02:00:00 -0.429100 2.052242 
2009-08-07 03:00:00 0.857940 -0.348118 
2009-08-07 04:00:00 0.394655 -1.578197 
2009-08-07 05:00:00 -0.240995 -1.474097 
2009-08-07 06:00:00 0.619148 -0.040635 
2009-08-07 07:00:00 -1.403177 -0.187540 
2009-08-07 08:00:00 -0.360626 -0.399728 
2009-08-07 09:00:00 0.179741 -2.709712 

In [100]: df['Time'] = df.index.asi8 

In [101]: dist = df.diff().fillna(0.) 

In [102]: dist['Dist'] = np.sqrt(dist.X**2 + dist.Y**2) 

In [103]: dist['Speed'] = dist.Dist/(dist.Time/1e9) 

In [104]: dist 
Out[104]: 
          X   Y   Time  Dist  Speed 
2009-08-07 00:00:00 0.000000 0.000000 0.000000e+00 0.000000  NaN 
2009-08-07 01:00:00 1.299516 2.653081 3.600000e+12 2.954248 0.000821 
2009-08-07 02:00:00 -0.828013 0.506708 3.600000e+12 0.970752 0.000270 
2009-08-07 03:00:00 1.287040 -2.400360 3.600000e+12 2.723637 0.000757 
2009-08-07 04:00:00 -0.463285 -1.230079 3.600000e+12 1.314430 0.000365 
2009-08-07 05:00:00 -0.635650 0.104100 3.600000e+12 0.644118 0.000179 
2009-08-07 06:00:00 0.860143 1.433462 3.600000e+12 1.671724 0.000464 
2009-08-07 07:00:00 -2.022324 -0.146906 3.600000e+12 2.027653 0.000563 
2009-08-07 08:00:00 1.042550 -0.212188 3.600000e+12 1.063924 0.000296 
2009-08-07 09:00:00 0.540367 -2.309984 3.600000e+12 2.372345 0.000659