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

如何遍历无零秒起始的分钟时段?Pandas数据处理求助

解决方案

你的代码核心问题是用dt.second == 0硬筛选分钟起始点,导致没有0秒记录的分钟直接被遗漏。要覆盖所有有数据的分钟,应该按小时+分钟维度分组,先提取每个分钟的第一个值(不管该分钟从哪一秒开始),再关联该分钟内每一秒的最后一个值来计算差值。

修正后的代码如下:

import pandas as pd

def Cumulative_delta():
    # 读取CSV并解析时间列
    df = pd.read_csv(Ex_Csv, usecols=['time', 'value'], parse_dates=['time'])
    df['value'] = df['value'].astype(int)
    
    # 生成分钟级分组标识(格式:HH:MM)
    df['hour_min'] = df['time'].dt.strftime('%H:%M')
    
    # 提取每个分钟的第一个值和对应时间
    minute_first = df.groupby('hour_min').agg(
        first_value=('value', 'first'),
        first_time=('time', 'first')
    ).reset_index()
    
    # 按秒分组,提取每一秒的最后一个值
    second_last = df.groupby(df['time'].dt.floor('S')).agg(
        last_value=('value', 'last')
    ).reset_index()
    # 给秒级数据加上分钟标识,用于关联
    second_last['hour_min'] = second_last['time'].dt.strftime('%H:%M')
    
    # 关联数据并计算差值
    result = pd.merge(second_last, minute_first, on='hour_min')
    result['delta'] = result['first_value'] - result['last_value']
    # 整理时间范围格式
    result['time_range'] = result.apply(lambda x: f"{x['first_time'].strftime('%H:%M:%S')}-{x['time'].strftime('%H:%M:%S')}", axis=1)
    
    # 整理输出列并保存
    output = result[['delta', 'time_range']].rename(columns={'delta': 'value', 'time_range': 'time'})
    output.to_excel('Datasets\\Data\\Cumulative_delta.xlsx', index=False)
    output.to_csv('Datasets\\CSV\\Cumulative_delta.csv', index=False)
    print('处理完成')

关键修正点说明

  • 用hour_min作为分组键:不管分钟内有没有0秒记录,只要该分钟有数据,就会被纳入分组,彻底解决遗漏问题。
  • 提取分钟第一个值:通过groupby('hour_min').agg('first')直接取每个分钟组的第一条记录,无需依赖0秒标记。
  • 秒级数据处理:用dt.floor('S')将时间精确到秒,确保每一秒的最后一条记录被正确提取。
  • 关联计算:通过hour_min将分钟起始值与该分钟内的所有秒级数据关联,计算每个秒的最后值与分钟第一个值的差值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 09:54:20