Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将具有4个参数的函数应用于groupby对象_Python_Pandas - Fatal编程技术网

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

Python 将具有4个参数的函数应用于groupby对象,python,pandas,Python,Pandas,我有一个包含经度和纬度的熊猫数据框,它由一个标识符分组 我试图找出如何将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,

我有一个包含经度和纬度的熊猫数据框,它由一个标识符分组

我试图找出如何将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个参数,可以在这里找到
我的目标是有一个称为“距离”的第三列,它是从每个点经过的距离。

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

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)
将所有必要的值移到一行(组内):

使用
Apply
axis=1
选项将函数应用于行:

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

从每个点到哪里?分组对象中的每个组都包含多行我要查找的是每行之间移动的距离。你是指它前面的那一行吗?是的,从它前面的那一行开始。
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