根据另一个数据帧的间隔将列添加到数据帧

我有一个正在操作的 gpx 文件。我想向其中添加一列,根据另一个按距离列出地形的数据框来描述地形。这是数据框:


GPS_df


    lat lon alt time    dist    total_dist

0   44.565335   -123.312517 85.314  2020-09-07 14:00:01 0.000000    0.000000

1   44.565336   -123.312528 85.311  2020-09-07 14:00:02 0.000547    0.000547

2   44.565335   -123.312551 85.302  2020-09-07 14:00:03 0.001137    0.001685

3   44.565332   -123.312591 85.287  2020-09-07 14:00:04 0.001985    0.003670

4   44.565331   -123.312637 85.270  2020-09-07 14:00:05 0.002272    0.005942

... ... ... ... ... ... ...

12481   44.565576   -123.316116 85.517  2020-09-07 17:28:14 0.002318    26.091324

12482   44.565559   -123.316072 85.587  2020-09-07 17:28:15 0.002469    26.093793

12483   44.565554   -123.316003 85.637  2020-09-07 17:28:16 0.003423    26.097217

12484   44.565535   -123.315966 85.697  2020-09-07 17:28:17 0.002249    26.099465

12485   44.565521   -123.315929 85.700  2020-09-07 17:28:18 0.002066    26.101532

地形_df:


dist    terrain

0   0.0 Start

1   3.0 Road

2   5.0 Gravel

3   8.0 Trail-hard

4   12.0    Gravel

5   16.0    Trail-med

6   18.0    Road

7   22.0    Gravel

8   23.0    Trail-easy

9   26.2    Road

我想出了以下有效的代码,但我想通过消除循环来提高它的效率:


GPS_df['terrain']=""

i=0

for j in range(0,len(GPS_df)):

    if GPS_df.total_dist[j]<= terrain_df.dist[i]:

        GPS_df.terrain[j]=terrain_df.terrain[i]

    else:

        i=i+1

        GPS_df.terrain[j]=terrain_df.terrain[i]

我尝试了六种不同的方法,但似乎没有一种能正常工作。我确信有一种简单的方法可以做到这一点,但到目前为止我还没有解决这个问题的技能和经验,所以我正在寻求一些帮助。我尝试使用剪切并添加标签,但剪切需要独特的标签。我可以使用 cut,然后以另一种方式用标签替换生成的间隔,但这似乎也不是最好的方法。我还尝试了从另一个问题中找到的这种方法,但它仅用第一个标签填充了该列(我也无法理解它的工作原理,因此很难进行故障排除)。


bins = terrain_df['dist']

names = terrain_df['terrain']


d = dict(enumerate(names, 1))


GPS_df['terrain2'] = np.vectorize(d.get)(np.digitize(GPS_df['dist'], bins))

感谢您能给我的任何指导。


萧十郎
浏览 82回答 1
1回答

繁花如伊

我相信pandas.merge_asof应该能解决问题。尝试:result&nbsp;=&nbsp;pd.merge_asof(left=GPS_df,&nbsp;right=terrain_df,&nbsp;left_on='total_dist',&nbsp;right_on='dist',&nbsp;direction='backward')
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python