首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >迭代两个数据帧以应用函数

迭代两个数据帧以应用函数
EN

Stack Overflow用户
提问于 2018-12-12 11:21:52
回答 1查看 66关注 0票数 0

我有以下两个数据帧(缩写):

代码语言:javascript
复制
df1
day Transmitter_ID  Species Lat Lng Date
4   A69-1601-27466  Golden perch    -35.495479100000004 144.45295380000002  13/08/2015
5   A69-1601-27466  Golden perch    -35.495479100000004 144.45295380000002  14/08/2015
6   A69-1601-27466  Golden perch    -35.495479100000004 144.45295380000002  15/08/2015
7   A69-1601-27466  Golden perch    -35.495479100000004 144.45295380000002  16/08/2015
8   A69-1601-27466  Golden perch    -35.5065473 144.4488804 17/08/2015
8   A69-1601-27466  Golden perch    -35.495479100000004 144.45295380000002  17/08/2015
9   A69-1601-27466  Golden perch    -35.5065473 144.4488804 18/08/2015
10  A69-1601-27466  Golden perch    -35.5065473 144.4488804 19/08/2015
11  A69-1601-27466  Golden perch    -35.5065473 144.4488804 20/08/2015
12  A69-1601-27466  Golden perch    -35.5065473 144.4488804 21/08/2015
13  A69-1601-27466  Golden perch    -35.5065473 144.4488804 22/08/2015
14  A69-1601-27466  Golden perch    -35.5065473 144.4488804 23/08/2015
15  A69-1601-27466  Golden perch    -35.5065473 144.4488804 24/08/2015

rivergps_df
Lng Lat River
151.7753278 -32.90526725    HUNTER RIVER
151.77526830000002  -32.90610052    HUNTER RIVER
151.77526830000002  -32.90752299    HUNTER RIVER
151.77526830000002  -32.90758849    HUNTER RIVER
151.775397  -32.90977754    HUNTER RIVER
151.7754468 -32.91062396    HUNTER RIVER
151.775578  -32.91202941    HUNTER RIVER
151.77578799999998  -32.9142797 HUNTER RIVER
151.7758178 -32.91459931    HUNTER RIVER
151.77586340000002  -32.91508789    HUNTER RIVER
151.7764116 -32.91645856    HUNTER RIVER
151.7765776 -32.91687345    HUNTER RIVER
151.77719040000002  -32.91861786    HUNTER RIVER

我还有一个haversine函数,它接受一对lat,lng,并返回两对之间的距离

代码语言:javascript
复制
def haversine(lon1, lat1, lon2, lat2):
    """
    Calculate the great circle distance between two points 
    on the earth (specified in decimal degrees)
    """
    # convert decimal degrees to radians 
    lon1, lat1, lon2, lat2 = map(radians, [lon1, lat1, lon2, lat2])

    # haversine formula 
    dlon = lon2 - lon1 
    dlat = lat2 - lat1 
    a = sin(dlat/2)**2 + cos(lat1) * cos(lat2) * sin(dlon/2)**2
    c = 2 * asin(sqrt(a)) 
    r = 6371 # Radius of earth in kilometers. Use 3956 for miles

我想对这两个数据帧做的是:

从df1中获取每个lng / lat,并对每个点应用rivergps_df的整个lng / lat范围的半正弦函数

返回半正弦函数的最小值所在的rivergps_df的索引

将此rivergps_df索引追加到df1

所以我的意思是,对于df1 -35.495479100000004,144.45295380000002中的第一个点,我想把半正弦函数应用到这里,比如lon1,lat1,lon2,lat2,其中lon2,lat2是rivergps_df中存在的所有点。然后,我想找出半正弦函数返回的最小值,将其附加到df1,然后移动到df1中的下一个点。

我该怎么做呢?

EN

回答 1

Stack Overflow用户

发布于 2018-12-12 12:21:08

一个想法是:

  • 定义一个函数haversin_argmin(lat, lon, df),该函数遍历df (例如for (lat2, lon2) df[['Lat', 'Lon']].iterrows():)并计算并返回haversine(lat, lon, lat2, lon2).
  • Then的argmin定义另一个函数f,该函数获取row,获取lat和D12,使用D14调用D13,然后返回作为新字段附加的D16的D15。H217 H118使用C19到D20 D21

请阅读apply的文档,以更好地了解如何定义f以及传递给apply的选项。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53735582

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档