将具有 4 个参数的函数应用于 groupby 对象



我有一个熊猫数据帧,其中包含按标识符分组的经度和纬度

我正在尝试弄清楚如何将haversine函数应用于数据集以计算每个数据点之间的距离。我能够弄清楚对未分组的数据集执行此操作,但不确定如何将此功能应用于 groupby 对象。数据看起来与此类似。

import pandas as pd
d = {'col1': ['a','a','a','a','a','b','b','b','b','b' ], 'lon': [28, 30 ,25.6, 
28.6,27,28.7,26.8,27.8,25,24], 'lat': [-70, -71 , -73, -64,-70, -71 , -75, -76,-75, -76]}
test = pd.DataFrame(data=d)
def top(df, n=5, column='col1'):
return df.sort_values(by=column)[-n:]
gp=test.groupby('col1')
gp.apply(top)

python中的haversine函数接受4个参数,可以在这里找到 https://stackoverflow.com/a/4913653/10572702 我的目标是有第三列称为距离,它是从每个点行进的距离。

您可以使用以下方法。 准备数据:

import pandas as pd
d = {'col1': ['a','a','a','a','a','b','b','b','b','b' ], 'lon': [28, 30 ,25.6,
28.6,27,28.7,26.8,27.8,25,24], 'lat': [-70, -71 , -73, -64,-70, -71 , -75, -76,-75, -76]}
test = pd.DataFrame(data=d)

将所有必要的值移动到一行(在组内(:

test['prev_lon'] = test.groupby('col1')['lon'].shift()
test['prev_lat'] = test.groupby('col1')['lat'].shift()

使用带有axis=1选项的apply将函数应用于行:

test['distance'] = test[['prev_lon','prev_lat','lon','lat']].apply(lambda x: haversine(*x.values), axis=1)

获取结果:

test.drop(['prev_lon','prev_lat'], axis=1, inplace=True)
print(test)
col1   lon  lat     distance
0    a  28.0  -70          NaN
1    a  30.0  -71   133.683214
2    a  25.6  -73   268.769282
3    a  28.6  -64  1007.882694
4    a  27.0  -70   670.723028
5    b  28.7  -71          NaN
6    b  26.8  -75   448.990904
7    b  27.8  -76   114.623346
8    b  25.0  -75   135.768371
9    b  24.0  -76   114.623346

最新更新