我得到了一个包含经纬度坐标的两列数据框:
import pandas as pd
values = {'Latitude': {0: 47.021503365600005,
1: 47.021503365600005,
2: 47.021503365600005,
3: 47.021503365600005,
4: 47.021503365600005,
5: 47.021503365600005},
'Longitude': {0: 15.481974060399999,
1: 15.481974060399999,
2: 15.481974060399999,
3: 15.481974060399999,
4: 15.481974060399999,
5: 15.481974060399999}}
df = pd.DataFrame(values)
df.head()
现在我想对数据框应用一个滚动窗口函数,该函数需要取出一行和另一行(窗口大小为2),并取这两行的经纬度(两列)以计算哈弗辛距离。
def haversine_distance(x):
print (x)
df.rolling(2, axis=1).apply(haversine_distance)
我的问题是我从未同时得到第一行的Lng1,Lat1和第二行的Lng2,Lat2。如果我使用axis=1,那么我将得到第一行的Lng1和Lat1。如果我使用axis=0,则我将得到第一行和第二行的Lng1和Lng2,但仅限于经度。
如何使用两行和两列应用滚动窗口?有点像这样:
def haversine_distance(x):
row1 = x[0]
row2 = x[1]
lng1, lat1 = row1['Longitude'], row1['Latitude']
lng2, lat2 = row2['Longitude'], row2['Latitude']
# do your stuff here
return 1
目前我是通过使用shift(-1)将数据框与自身连接来进行这个计算,从而使得所有四个坐标都在一行中。但也可以使用rolling方法实现。另一种选择是将Lng和Lat合并到一列中,并对其应用axis=0的rolling方法。但肯定有更简单的方法,对吧?
shift(-1)
进行连接,并将您的函数应用于每一行是最有效的方法。我不知道是否有一种同时在多个列上应用滚动窗口函数的方法。 - Ken Syme