【问题标题】:Applying a Function to a List and a Dataframe将函数应用于列表和数据框
【发布时间】:2021-10-08 15:37:22
【问题描述】:

我有一对经度和纬度坐标,它们将被输入到一个函数中,以查找它与第二对坐标之间的距离

例如:

lat_string1 = 48.167
long_string1 = -99.648
lat_string2 = 48.25606
long_string2 = -103.31802 

使用Haversine Distance函数我可以找到这两个坐标之间的距离。

def dist(lat1, long1, lat2, long2):

    # convert decimal degrees to radians 
    lat1, long1, lat2, long2 = map(radians, [lat1, long1, lat2, long2])
    # haversine formula 
    dlon = long2 - long1 
    dlat = lat2 - lat1 
    a = sin(dlat/2)**2 + cos(lat1) * cos(lat2) * sin(dlon/2)**2
    c = 2 * asin(sqrt(a)) 
    # Radius of earth in kilometers is 6371
    km = 6371* c
    return km

print(dist(lat_string1, long_string1, lat_string2, long_string2))
272.09670525744474

如何将此函数应用于 lat_string1long_string1 以及 coordinates_df 包含 1,000 个(或以下示例 df 中的三个)坐标对,以便它可以打印 A、B 和C?

lat_string1 = 48.167
long_string1 = -99.648    
coordinates_df = pd.DataFrame({'Name':['A', 'B', 'C'], 'Longitude':[-102.65324700, -102.75365900, -102.90515700], 'Latitude':[48.47342600, 48.31341700, 48.11112400]})

【问题讨论】:

    标签: python function apply


    【解决方案1】:

    你可以使用申请:

    coordinates_df['distance'] = coordinates_df.apply(lambda row : dist(lat_string1,long_string1,row['Latitude'],row['Longitude']),axis=1)
    

    然后就可以打印了。

    【讨论】:

    • 或者更好,如果你的 dist 函数支持广播(即 numpy 函数),你可以做 coordinates_df['distance'] = dist(lat_string1,long_string1,coordinates_df['Latitude'],coordinates_df['Longitude'] )
    猜你喜欢
    • 2021-03-20
    • 1970-01-01
    • 2020-04-24
    • 2013-11-19
    • 2019-02-07
    • 1970-01-01
    • 2017-04-22
    • 2020-03-23
    相关资源
    最近更新 更多