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

如何用Pandas的groupby/聚合函数规整带不规则时间戳的地铁站数据?

需求说明

我有一份不同地铁站的每小时进出站记录数据集,部分地铁站因运营时间导致时间增量存在不规则间隔(比如部分站点17:30关闭,对应行的时间戳为05:30:00,其余行时间戳的分钟部分均为0)。我希望将数据标准化为小时级间隔,把这些不规则的30分钟时间戳数据合并到对应整点的记录中(即站点在05:30:00的进出站数与05:00:00的数值求和)。能否用groupby/聚合函数实现该需求?

示例数据

import pandas as pd

df = pd.DataFrame(
    {'Date Time':pd.to_datetime(['2023-01-01 00:00:00', '2023-01-01 00:00:00', '2023-01-01 00:00:00', '2023-01-01 00:30:00', 
                                                '2023-01-01 00:30:00', '2023-01-01 00:30:00',  '2023-01-01 01:00:00', 
                                                '2023-01-01 01:00:00', '2023-01-01 01:00:00']),
     'Station':['Station A', 'Station B', 'Station C', 'Station A', 'Station B', 'Station C','Station A', 'Station B', 'Station C'],
     'Entries':[1, 2, 3, 1, 2, 3, 1, 2, 3],
     'Exits':[1, 2, 3, 1, 2, 3, 1, 2, 3]}
)

原始数据

Date TimeStationEntriesExits
2023-01-01 00:00:00Station A11
2023-01-01 00:00:00Station B22
2023-01-01 00:00:00Station C33
2023-01-01 00:30:00Station A11
2023-01-01 00:30:00Station B22
2023-01-01 00:30:00Station C33
2023-01-01 01:00:00Station A11
2023-01-01 01:00:00Station B22
2023-01-01 01:00:00Station C33

期望输出

Date TimeStationEntriesExits
2023-01-01 00:00:00Station A22
2023-01-01 00:00:00Station B44
2023-01-01 00:00:00Station C66
2023-01-01 01:00:00Station A11
2023-01-01 01:00:00Station B22
2023-01-01 01:00:00Station C33

解决方案

可以通过groupby结合时间戳的整点归一化实现,核心思路是把所有时间戳向下取整到最近的整点,再按整点时间和站点分组聚合求和。

实现代码

# 将Date Time列向下取整到小时级别
df['Hourly Time'] = df['Date Time'].dt.floor('H')

# 按Hourly Time和Station分组,对Entries和Exits求和
result = df.groupby(['Hourly Time', 'Station'])[['Entries', 'Exits']].sum().reset_index()

# 重命名列名匹配期望输出
result = result.rename(columns={'Hourly Time': 'Date Time'})

print(result)

输出结果

Date Time    Station  Entries  Exits
0 2023-01-01 00:00:00  Station A        2      2
1 2023-01-01 00:00:00  Station B        4      4
2 2023-01-01 00:00:00  Station C        6      6
3 2023-01-01 01:00:00  Station A        1      1
4 2023-01-01 01:00:00  Station B        2      2
5 2023-01-01 01:00:00  Station C        3      3

说明

  • dt.floor('H')会将任意时间戳向下取整到最近的整点,比如00:30:00转换为00:00:00,05:30:00转换为05:00:00,正好满足将30分钟数据合并到对应整点的需求。
  • 同时按整点时间和站点分组聚合,确保每个站点每个整点的进出站数是该时段内所有记录的总和。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 11:53:16