我想對flightradar資料進行快速操作,看看距離中的速度是否與報告中的速度相符。 我有多個航班,有人告訴我不要在pandas資料幀上運行雙回圈。 下面是一個資料框架樣本:
import pandas as pd
from datetime import datetime
from shapely.geometry import Point
from geopy.distance import distance
dates = ['2020-12-26 15:13:01', '2020-12-26 15:13:07','2020-12-26 15。 13:19','2020-12-26 15:13:32','2020-12-26 15:13:38']
datetimes = [datetime.fromisoformat(date) for date in dates]
data = {'UTC': datetimes,
'Callsign': ["1", "1","2","2", "2"] 。
'Position':[Point(30.542175, -91. 13999200000001), Point(30.546204,-91.14020499999999),Point(30. 551443,-91.14417299999999),Point(30.553909,-91. 15136699999999),Point(30.554489,-91.155075)]
}
df = pd.DataFrame(data)
我想做的是添加一個名為 "dist "的新列。 如果它是新呼號的第一個元素,這一列將是0,但如果不是,它將是一個點和前一個點之間的距離。
產生的df應該是這樣的:
df1 = df
dist = [0,0.27783309075379214,0, 0。 46131362750613436,0.22464461718704595]
df1['dist'] = dist
我所嘗試的是首先指定一個組的索引:
我所嘗試的是首先指定一個組的索引。
df['group_index'] = df.groupby('Callsign').cumcount()
然后groupby
然后嘗試應用該函式:
df['dist'] = df.groupby('Callsign') 。 apply(lambda g: 0 if g.group_index == 0 else distance((g.Position.x , g.Position.y),
(g.Position.shift().x , g.Position.shift().y)).英里)
我希望這將給我每個組的第一個索引的0,然后在所有其他的索引上運行距離函式,并回傳一個英里的值。 然而,這并不奏效。
代碼出錯的原因至少有一個,那就是shapely物件的.x和.y屬性被呼叫到了系列上,而不是物件上。
如果有任何關于如何解決這個問題的想法,我們將不勝感激。
uj5u.com熱心網友回復:
df = df.sort_values(by=['Callsign', 'UTC'] )
df['Position_prev'] = df['Position'].shift() .bfill()
def get_dist(row)。
return distance((row['Position'].x, row['Position'].y)。
(row['Position_prev'].x, row['Position_prev'].y)).英里
df['dist'] = df.apply(get_distances, axis=1)
# Flag row if callsign is different from previous row callsign.
new_callsign_rows = df['Callsign'] != df['Callsign'].shift()
# 將每個呼號組的第一個距離清零。
df.loc[new_callsign_rows, 'dist'] = 0.0。
# Drop shifted column[/span]。
df = df.drop(columns='Position_prev')
print(df)
UTC呼號位置距離
0 2020-12-26 15: 13:01 1點(30. 542175 -91.13999200000001) 0.000000[/span].
1 2020-12-26 15: 13:07 1點(30. 546204 -91.14020499999999) 0.277833[/span]。
2 2020-12-26 15。 13:19 2點(30. 551443 -91.14417299999999) 0.000000[/span]。
3 2020-12-26 15。 13:32 2 點(30. 553909 -91.15136699999999) 0.461314[/span]。
4 2020-12-26 15。 13:38 2點(30. 554489 -91.155075) 0.224645[/span
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/307665.html
標籤:
