我想在資料框中創建一個新列,其中包含當前事務位置與上一個事務位置之間的距離。
我有每個位置的緯度和經度,并使用半正弦公式來計算兩個坐標之間的距離。
def haversine(lat1, lon1, lat2, lon2):
lon1, lat1, lon2, lat2 = map(np.radians, [lon1, lat1, lon2, lat2])
dlon = lon2 - lon1
dlat = lat2 - lat1
a = np.sin(dlat / 2.0) ** 2 np.cos(lat1) * np.cos(lat2) * np.sin(dlon / 2.0) ** 2
c = 2 * np.arcsin(np.sqrt(a))
km = 6367 * c # Radius of earth in kilometers. (Use 3956 for miles)
return km
但是,我正在嘗試對其進行調整,以便計算與最后一行(前一個位置)的差異:
for i in range(0,df.shape[0]-1):
df['Dist_last_trans'] = \
haversine(df['merch_lat'].iloc[i-1], df['merch_long'].iloc[i-1],
df['merch_lat'].iloc[i], df['merch_long'].iloc[i])
但是每一行的輸出都是相同的,這顯然是錯誤的。
任何幫助將不勝感激。
uj5u.com熱心網友回復:
我用玩具資料框復制了你的案例。問題是您在分配期間沒有指定行。這將導致修改所有行的 Diff_last_trans 列的列范圍分配。
>>> import pandas as pd
>>> data = [['Alex',10],['Bob',12],['Clarke',13]]
>>> df = pd.DataFrame(data,columns=['Name','Diff_last_trans'])
>>> df['Diff_last_trans']
0 10
1 12
2 13
Name: Diff_last_trans, dtype: int64
>>> df['Diff_last_trans'] =3
>>> df['Diff_last_trans']
0 3
1 3
2 3
Name: Diff_last_trans, dtype: int64
嘗試指定一個行索引
>>> df.loc[1]['Diff_last_trans'] = 2
>>> df['Diff_last_trans']
0 3
1 2
2 3
在您的情況下,這將用作
df.loc[i]['Diff_last_trans'] = \
haversine(df['merch_lat'].iloc[i-1], df['merch_long'].iloc[i-1],
df['merch_lat'].iloc[i], df['merch_long'].iloc[i])
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/410474.html
標籤:
