You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按站点循环将公交时刻表Pandas DataFrame拆分为单趟行程子表

拆分公交行程DataFrame为单趟子表

核心思路

通过识别每趟行程的起始站点(示例中为"A"),为每行数据分配对应行程的分组编号,最终按分组拆分得到单趟行程的子DataFrame。

实现代码

import pandas as pd

# 示例数据
df = pd.DataFrame({
    "scheduled": ["2023-05-25 13:00", "2023-05-25 13:15", "2023-05-25 13:45", 
                  "2023-05-25 14:35", "2023-05-25 14:50", "2023-05-25 15:20"],
    "stop": ["A", "B", "C", "A", "B", "C"]
})
df["scheduled"] = pd.to_datetime(df["scheduled"])

# 1. 标记每趟行程的起始行(以站点"A"作为行程起点)
start_mask = df["stop"] == "A"

# 2. 生成行程分组ID:每遇到一个起点,分组号递增
df["trip_id"] = start_mask.cumsum()

# 3. 按trip_id拆分得到多个子DataFrame
trip_dfs = [group for _, group in df.groupby("trip_id")]

# 查看拆分结果
for i, trip_df in enumerate(trip_dfs, 1):
    print(f"第{i}趟行程:")
    print(trip_df.drop("trip_id", axis=1))
    print("---")

代码解释

  • 标记起始行:通过布尔掩码定位每趟行程的第一个站点,后续以此作为行程拆分的分界点。
  • 生成分组ID:利用cumsum()对布尔掩码累加(True计为1,False计为0),自动为同一趟行程的所有行分配相同的分组编号。
  • 拆分DataFrame:通过groupby按分组编号聚合,将每个聚合结果转换为独立的子DataFrame存入列表。

输出结果

第1趟行程:
           scheduled stop
0 2023-05-25 13:00:00    A
1 2023-05-25 13:15:00    B
2 2023-05-25 13:45:00    C
---
第2趟行程:
           scheduled stop
3 2023-05-25 14:35:00    A
4 2023-05-25 14:50:00    B
5 2023-05-25 15:20:00    C
---

扩展说明

如果你的行程起始站点不是"A",只需修改start_mask的判断条件即可。例如起始站为"总站",则改为df["stop"] == "总站"。

内容的提问来源于stack exchange,提问作者eliangius

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 11:27:15