我有一個(gè)正在操作的 gpx 文件。我想向其中添加一列,根據(jù)另一個(gè)按距離列出地形的數(shù)據(jù)框來描述地形。這是數(shù)據(jù)框:GPS_df lat lon alt time dist total_dist0 44.565335 -123.312517 85.314 2020-09-07 14:00:01 0.000000 0.0000001 44.565336 -123.312528 85.311 2020-09-07 14:00:02 0.000547 0.0005472 44.565335 -123.312551 85.302 2020-09-07 14:00:03 0.001137 0.0016853 44.565332 -123.312591 85.287 2020-09-07 14:00:04 0.001985 0.0036704 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.09132412482 44.565559 -123.316072 85.587 2020-09-07 17:28:15 0.002469 26.09379312483 44.565554 -123.316003 85.637 2020-09-07 17:28:16 0.003423 26.09721712484 44.565535 -123.315966 85.697 2020-09-07 17:28:17 0.002249 26.09946512485 44.565521 -123.315929 85.700 2020-09-07 17:28:18 0.002066 26.101532地形_df:dist terrain0 0.0 Start1 3.0 Road2 5.0 Gravel3 8.0 Trail-hard4 12.0 Gravel5 16.0 Trail-med6 18.0 Road7 22.0 Gravel8 23.0 Trail-easy9 26.2 Road我想出了以下有效的代碼,但我想通過消除循環(huán)來提高它的效率:GPS_df['terrain']=""i=0for 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]我嘗試了六種不同的方法,但似乎沒有一種能正常工作。我確信有一種簡單的方法可以做到這一點(diǎn),但到目前為止我還沒有解決這個(gè)問題的技能和經(jīng)驗(yàn),所以我正在尋求一些幫助。我嘗試使用剪切并添加標(biāo)簽,但剪切需要獨(dú)特的標(biāo)簽。我可以使用 cut,然后以另一種方式用標(biāo)簽替換生成的間隔,但這似乎也不是最好的方法。我還嘗試了從另一個(gè)問題中找到的這種方法,但它僅用第一個(gè)標(biāo)簽填充了該列(我也無法理解它的工作原理,因此很難進(jìn)行故障排除)。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))感謝您能給我的任何指導(dǎo)。
1 回答

繁花如伊
TA貢獻(xiàn)2012條經(jīng)驗(yàn) 獲得超12個(gè)贊
我相信pandas.merge_asof
應(yīng)該能解決問題。嘗試:
result = pd.merge_asof(left=GPS_df, right=terrain_df, left_on='total_dist', right_on='dist', direction='backward')
添加回答
舉報(bào)
0/150
提交
取消