首页 > 文章列表 > 如何用Python计算共享单车每次骑行时间?

如何用Python计算共享单车每次骑行时间?

306 2025-04-02

如何用Python计算共享单车每次骑行时间?

Python代码实现共享单车骑行时间计算

本文演示如何利用Python高效计算共享单车每次骑行时间。我们使用Pandas库处理数据,假设已拥有包含单车ID、锁车状态和时间戳的DataFrame。

示例DataFrame如下:

import pandas as pd

data = {
    "bicycle_id": ["0000ff105fd5f9099b866bccd157dc50"] * 5,
    "lock_status": [0, 1, 0, 1, 0],
    "update_time": pd.to_datetime(["2020-12-21 06:32:48", "2020-12-21 06:50:18", "2020-12-21 08:23:32", "2020-12-21 08:44:34", "2020-12-22 08:00:44"])
}

df = pd.DataFrame(data)

其中:

  • "bicycle_id": 单车ID
  • "lock_status": 锁车状态 (0: 开锁, 1: 关锁)
  • "update_time": 时间戳 (Pandas datetime格式)

计算骑行时间步骤:

  1. 数据预处理: 确保"update_time"列为Pandas的datetime类型。 上面的示例代码已完成此步骤。

  2. 按单车ID分组: 使用groupby()方法按单车ID分组。

  3. 提取开锁和关锁时间: 遍历每个单车ID的组,分别提取开锁和关锁的时间戳。

  4. 计算时间差: 使用diff()方法计算相邻开锁和关锁时间戳的时间差,并转换为秒。

完整的Python代码如下:

import pandas as pd

# ... (DataFrame创建代码如上所示) ...

grouped = df.groupby("bicycle_id")

for bike_id, group in grouped:
    # 提取开锁和关锁事件
    unlock_events = group[group["lock_status"] == 0]
    lock_events = group[group["lock_status"] == 1]

    # 检查数据完整性,确保开锁和关锁事件数量匹配
    if len(unlock_events) != len(lock_events):
        print(f"警告:单车 {bike_id} 的开锁和关锁事件数量不匹配!")
        continue

    # 计算骑行时间
    for i in range(len(unlock_events)):
        unlock_time = unlock_events["update_time"].iloc[i]
        lock_time = lock_events["update_time"].iloc[i]
        ride_duration = (lock_time - unlock_time).total_seconds()
        print(f"单车 {bike_id},第 {i+1} 次骑行时间:{ride_duration} 秒")

此代码更健壮,包含了对开锁和关锁事件数量不匹配情况的处理,避免了潜在的错误。 它也更清晰地展示了计算过程。 记住安装Pandas库: pip install pandas

来源:1740302622