Pandas DataFrame,4 lat/long 列的 Haversine 函数到新列
Pandas DataFrame, Haversine function of 4 lat/long columns to new column
使用此 DataFrame,我尝试使用开始 lat/long 和结束 lat/long 来创建一个新列,显示两者之间的 Haversine 距离
import pandas as pd
import haversine as hs
d = {'start_lat': [35.9946, 29.4400,29.4400 ], 'start_long': [-81.7266,-98.4590, -98.4590 ],
'end_lat': [ 36.430124, 29.819364, 29.273085], 'end_long': [-81.179483,-99.142791,-98.836360]}
df = pd.DataFrame(data=d)
df
我可以让 Haversine 函数作为独立函数工作:
def hav(x, y):
return hs.haversine(x, y)
start_coord=(35.9946, -81.7266)
end_coord=(36.430124, -81.179483)
print(hav(start_coord, end_coord))
为了尝试为 df 创建新的 haversine 列,我首先创建了两个新的坐标列
df['start_coord'] = list(zip(df.start_lat, df.start_long))
df['end_coord'] = list(zip(df.end_lat, df.end_long))
df
然后我尝试在创建新列时应用该函数,但我收到 值错误: 太多值无法解压(预期 2)
df["Haversine_dist"] = hav(df["start_coord"],df["end_coord"])
df
您可以在此处使用带有 lambda 的应用来处理单行。当您输入 df['start_coord']
时,您正在使用整个系列。
df["Haversine_dist"] = df.apply(lambda x: hav(x["start_coord"], x["end_coord"]), axis=1)
使用此 DataFrame,我尝试使用开始 lat/long 和结束 lat/long 来创建一个新列,显示两者之间的 Haversine 距离
import pandas as pd
import haversine as hs
d = {'start_lat': [35.9946, 29.4400,29.4400 ], 'start_long': [-81.7266,-98.4590, -98.4590 ],
'end_lat': [ 36.430124, 29.819364, 29.273085], 'end_long': [-81.179483,-99.142791,-98.836360]}
df = pd.DataFrame(data=d)
df
我可以让 Haversine 函数作为独立函数工作:
def hav(x, y):
return hs.haversine(x, y)
start_coord=(35.9946, -81.7266)
end_coord=(36.430124, -81.179483)
print(hav(start_coord, end_coord))
为了尝试为 df 创建新的 haversine 列,我首先创建了两个新的坐标列
df['start_coord'] = list(zip(df.start_lat, df.start_long))
df['end_coord'] = list(zip(df.end_lat, df.end_long))
df
然后我尝试在创建新列时应用该函数,但我收到 值错误: 太多值无法解压(预期 2)
df["Haversine_dist"] = hav(df["start_coord"],df["end_coord"])
df
您可以在此处使用带有 lambda 的应用来处理单行。当您输入 df['start_coord']
时,您正在使用整个系列。
df["Haversine_dist"] = df.apply(lambda x: hav(x["start_coord"], x["end_coord"]), axis=1)