gpt4 book ai didi

python - Pandas——将值从一列映射到另一列

转载 作者:太空宇宙 更新时间:2023-11-04 00:13:31 26 4
gpt4 key购买 nike

下面我有一个 DataFrame 显示每辆车 (Vehicle_ID) 将如何按特定顺序 (Pos_in_route) 访问不同的地方 (place_id)。

place_id    Lat      Lon      Vehicle_ID    Pos_in_route
0 51.4457678 -0.45613 0 0
1 52.497911 -1.903832 0 1
2 52.332395 -1.346753 0 2
0 51.4457678 -0.45613 0 3
0 51.4457678 -0.45613 1 0
4 52.110728 -0.463547 1 1
3 52.276323 -1.579845 1 2
5 52.423667 -0.609697 1 3
0 51.4457678 -0.45613 1 4

现在我尝试添加另外两列以根据列 (Pos_in_route) 显示先前访问过的地点 (prior_lat, prior_lon) 的 GPS 坐标。如果没有 place 的先前位置,它将是它自己(即 place_id = 0)

    place_id    Lat      Lon      Vehicle_ID    Pos_in_route   prior_lat    prior_lon
0 51.4457678 -0.45613 0 0 51.4457678 -0.45613
1 52.497911 -1.903832 0 1 51.4457678 -0.45613
2 52.332395 -1.346753 0 2 52.497911 -1.903832
0 51.4457678 -0.45613 0 3 52.332395 -1.346753
0 51.4457678 -0.45613 1 0 51.4457678 -0.45613
4 52.110728 -0.463547 1 1 51.4457678 -0.45613
3 52.276323 -1.579845 1 2 52.110728 -0.463547
5 52.423667 -0.609697 1 3 52.276323 -1.579845
0 51.4457678 -0.45613 1 4 52.423667 -0.609697

这只是我程序的一小部分,但我很难展示完整的代码。也许有一种简单的方法可以在我的程序末尾添加最后两列?

最佳答案

您可以使用 GroupBy + shift 然后使用 bfill:

g = df.groupby('Vehicle_ID')
df[['Prior_Lat', 'Prior_Lon']] = g[['Lat', 'Lon']].shift().bfill()

print(df[['Prior_Lat', 'Prior_Lon']])

Prior_Lat Prior_Lon
0 51.445768 -0.456130
1 51.445768 -0.456130
2 52.497911 -1.903832
3 52.332395 -1.346753
4 51.445768 -0.456130
5 51.445768 -0.456130
6 52.110728 -0.463547
7 52.276323 -1.579845
8 52.423667 -0.609697

或者,您可以使用 fillna 而不是 bfill:

df[['Prior_Lat', 'Prior_Lon']] = g[['Lat', 'Lon']].shift().fillna(df[['Lat', 'Lon']])

关于python - Pandas——将值从一列映射到另一列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51705595/

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