gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 06:43:27 26 4
gpt4 key购买 nike

我有一个 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com