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

如何按时间单位而非逐行迭代pandas DataFrame?

高效按时间维度迭代处理DataFrame数据的方法

嘿,完全懂你的需求!用iterrows()逐行处理不仅效率低,还容易写得繁琐。针对按Time列的时间单位批量处理对应数据,有几个比逐行迭代高效得多的方法,我给你详细说说:

1. 用groupby()按时间属性分组迭代

这是最直接的方式,只要你的Time列是datetime类型,就可以按天、小时、分钟等时间维度分组,一次性拿到对应时间的所有数据:

首先确保Time列是datetime格式(如果还不是的话):

import pandas as pd
df['Time'] = pd.to_datetime(df['Time'])  # 若有特定格式,可加format参数,比如format="%Y-%m-%d %H:%M:%S"

然后根据需要的时间粒度分组迭代:

  • 按日期分组:
for date, daily_data in df.groupby(df['Time'].dt.date):
    print(f"正在处理日期: {date}")
    # 在这里写你的处理逻辑,比如计算当日数据的总和、均值
    daily_total = daily_data['数值列'].sum()
    print(f"当日总和: {daily_total}\n")
  • 按小时分组:
for hour, hourly_data in df.groupby(df['Time'].dt.floor('H')):  # floor('H')确保是整小时分组
    print(f"正在处理小时段: {hour}")
    # 处理逻辑示例:统计该小时的数据条数
    hourly_count = hourly_data.shape[0]
    print(f"该小时数据条数: {hourly_count}\n")

2. 用resample()处理时间序列数据

如果你的数据是标准的时间序列(有连续或间隔的时间戳),resample()会更合适——它不仅能按时间粒度分组,还能自动补全缺失的时间区间(比如某小时没有数据时,会返回空的组),非常适合做时间维度的规整和统计:

第一步先把Time列设为索引:

df.set_index('Time', inplace=True)

然后按需要的时间频率重采样并迭代:

  • 按30分钟为单位迭代:
for time_window, window_data in df.resample('30T'):  # '30T'代表30分钟,其他频率比如'D'是天,'H'是小时
    print(f"正在处理时间段: {time_window}")
    # 处理逻辑示例:计算该窗口的最大值
    window_max = window_data['数值列'].max()
    print(f"该窗口最大值: {window_max}\n")

为什么这些方法比iterrows()好?

iterrows()是逐行遍历,本质是Python层面的循环,速度很慢;而groupby()和resample()都是基于pandas的向量化操作实现的,底层用C语言优化过,数据量越大,性能差距越明显——处理十万级甚至百万级数据时,效率能提升几十倍。

如果需要自定义时间分组(比如非标准的时间间隔),还可以用pd.Grouper()配合groupby(),比如:

# 每2小时为一组
for time_group, group_data in df.groupby(pd.Grouper(key='Time', freq='2H')):
    # 处理逻辑
    pass

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:08:38