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

标签 python pandas

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

我试图弄清楚如何将半正弦函数应用于数据集来计算每个数据点之间的距离。我能够计算出对未分组的数据集执行此操作,但不确定如何将此函数应用于 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 中的二正矢函数有 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()

使用 applyaxis=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

关于python - 将具有 4 个参数的函数应用于 groupby 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59348643/

相关文章:

python - 如何连接/使用字符串在 python/pandas 中执行命令

python - 在Python中将字典格式的txt文件转换为excel

python - 在 python 中以字符串形式输入目录

python - 从 Python 字典中插入值,包括 MySQL 的键

python - 用Python读取FTP文件内容并同时用于Pandas和直接使用

python - 如何使用 `pivot` 来跟踪输赢?

python - 从电话号码的数据框列中删除特殊字符

python - 在 python 中只取一系列日期中的月份

python - 如何查找连续重复 3 次的列表的重复项

python - 如何解释 model.evaluate() 返回的损失?