gpt4 book ai didi

python - 按数据帧分组 : Use column-values in current and previous row in Function

转载 作者:行者123 更新时间:2023-12-01 02:13:03 24 4
gpt4 key购买 nike

我有一个具有这种结构的数据框:

import pandas as pd
from geopy.distance import vincenty

data = {'id': [1, 2, 3, 1, 2 , 3],
'coord': [[10.1, 30.3], [10.5, 32.3], [11.1, 31.3],
[10.1, 30.3], [10.5, 32.3], [61, 29.1]],
}
df = pd.DataFrame(data)

它看起来是这样的:

           coord    id
0 [10.1, 30.3] 1
1 [10.5, 32.3] 2
2 [11.1, 31.3] 3
3 [10.1, 30.3] 1
4 [10.5, 32.3] 2
5 [61, 29.1] 3

现在,我想按id分组。然后,我想使用当前行和上一行坐标。这些应该在函数中使用来计算两个坐标之间的距离:

这是我尝试过的:

df.groupby('id')['coord'].apply(lambda x: vincenty(x, x.shift(1)))

vincenty(x,y)期望 x 与 (10, 20) 相似,y 也同样,并返回一个 float 。

显然,这是行不通的。该函数接收两个 Series 对象而不是两个列表。因此,下一步可能应该使用 x.values.tolist() 。不过,我对事情的理解到这里就结束了。因此,我将不胜感激任何关于如何解决这个问题的想法!

最佳答案

我认为你需要shift每组列,然后应用函数并过滤掉 NaN 行:

def vincenty(x, y):
print (x,y)
return x + y

df['new'] = df.groupby('id')['coord'].shift()

m = df['new'].notnull()
df.loc[m, 'out'] = df.loc[m, :].apply(lambda x: vincenty(x['coord'], x['new']), axis=1)
print (df)
coord id new out
0 [10.1, 30.3] 1 NaN NaN
1 [10.5, 32.3] 2 NaN NaN
2 [11.1, 31.3] 3 NaN NaN
3 [10.1, 30.3] 1 [10.1, 30.3] [10.1, 30.3, 10.1, 30.3]
4 [10.5, 32.3] 2 [10.5, 32.3] [10.5, 32.3, 10.5, 32.3]
5 [61, 29.1] 3 [11.1, 31.3] [61, 29.1, 11.1, 31.3]

关于python - 按数据帧分组 : Use column-values in current and previous row in Function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48596213/

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