【发布时间】:2023-03-19 17:23:02
【问题描述】:
我正在努力在 python 中实现连接扫描算法,因为我需要访问最短的公共交通路径。所以我正在尝试从 gtfs 文件创建一个连接表。
我有一个包含以下列的数据框 (stop_times):
trip_id arrival_time departure_time stop_sequence stop_id
0 id1 06:02:00 06:02:00 0 stop_id1
1 id1 06:05:00 06:05:00 1 stop_id2
2 id1 06:06:00 06:06:00 2 stop_id3
3 id1 06:08:00 06:08:00 3 stop_id4
原始文件要长得多,包含许多由trip_id定义的行程的数据。
我想将第一个数据帧中包含的一些值保存在第二个数据帧中,该数据帧将列出站点之间的连接并且基本上有四列:
departure_station arrival_station departure_time arrival_time
我的目标是从 stop_times 数据框中提取值并将它们插入到我创建的空行中的正确行中。但是,我遇到了一些问题,而且我已经卡了很长时间了。
我需要迭代 stop_times 数据帧 2“一次行”并在前一行开始新的迭代。第一次迭代将在索引 0-1 上,第二次在 1-2 上,第三次在 2-3 上等等。
目前,我只能使用以下代码对第 0-1、2-3 行等进行迭代,但这不是我在这里想要做的。
for i, g in course.groupby(np.arange(len(course)) // 2):
知道我该如何处理吗?
现在让我们考虑第 0-1 行的第一次迭代:我需要在第一行追加空数据框:
- stop_times 第一行的离开时间
- stop_times 第二行的到达时间
- stop_times第一行的stop_sequence(对应department_station列)
- stop_times第二行的stop_sequence(对应arranty_station列)
这会给我以下信息:
departure_station arrival_station departure_time arrival_time
0 0 1 06:02:00 06:05:00
然后对数据框的其余部分重复此操作:
departure_station arrival_station departure_time arrival_time
0 0 1 06:02:00 06:05:00
1 1 2 06:05:00 06:06:00
2 2 3 06:06:00 06:08:00
这是我迄今为止尝试过的:
stop_time = pd.read_csv('/Users/im/Downloads/IDFM_gtfs/stop_times.txt')
stop_time = stop_time[:30]
course = stop_time.loc[stop_time['trip_id'] == 'id1']
for i, g in course.groupby(np.arange(len(course)) // 2):
connexion = g.reset_index()
connexion = connexion[['trip_id', 'arrival_time', 'departure_time', 'stop_id', 'stop_sequence']]
dep_hor = connexion.loc[connexion.index == 0, ['departure_time']]
arriv_hor = connexion.loc[connexion.index == 1, ['arrival_time']]
table_horaire = table_horaire.append(dep_hor)
table_horaire = table_horaire.append(arriv_hor)
这给了我以下数据框:
arrival_time departure_time arrival_station departure_station
0 NaN 06:02:00 NaN NaN
1 06:05:00 NaN NaN NaN
0 NaN 06:06:00 NaN NaN
1 06:08:00 NaN NaN NaN
0 NaN 06:10:00 NaN NaN
1 06:12:00 NaN NaN NaN
0 NaN 06:14:00 NaN NaN
1 06:16:00 NaN NaN NaN
任何帮助将不胜感激,如果某些部分没有得到很好的解释,请告诉我,我对编程还是很陌生,还不知道所有正确的术语。
【问题讨论】:
-
在大数据帧上迭代计算成本很高。您是否尝试过使用矢量化方法?如果您需要将新列从第一个数据帧附加到第二个数据帧,您是否尝试过使用
map,因为您有 id 作为唯一标识符。 -
您好,
stop_id是您数据中站的同义词吗? -
@Joe 感谢您的意见。我考虑了计算成本,并正在考虑解决这个问题。我从未听说过任何矢量化方法,但我一定会研究一下。
-
@jottbe stop_id 是电台的标识符,这里我简化了数据框以便于阅读,但每个电台都有一个 id,让我以后可以得到它的名字。
标签: python pandas loops dataframe gtfs