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

如何用Pandas计算每分钟内每秒相对于起始秒的Delta值

基于Pandas实现分钟基准的差值计算需求

完全可以用Pandas实现你的需求,以下是针对40万行CSV数据的优化方案,兼顾重复记录处理与目标计算逻辑:

核心思路

  1. 保留时间的完整datetime格式,方便按分钟维度分组
  2. 先处理每秒的重复记录:对同一秒的多条记录取最后一条(对应需求里的“每秒尾值”)
  3. 为每个分钟组提取起始秒(如10:00:00)的Value作为基准值
  4. 计算每个时间点的尾值与对应分钟基准值的差值
  5. 构造符合要求的时间范围字符串列

修改后的代码

import pandas as pd

def test_minute_based_diff():
    # 读取CSV,保留Time为datetime类型,只加载需要的列
    df = pd.read_csv(Ex_Csv, usecols=['Time', 'Value'], parse_dates=[0])
    
    # 处理重复记录:按秒分组取最后一条(即每秒的尾值),同时保持原始顺序
    df_second_unique = df.groupby(df['Time'].dt.floor('1S'), sort=False)['Value'].last().reset_index()
    
    # 新增分钟分组标识:提取每个时间所属的分钟起始点
    df_second_unique['minute_start'] = df_second_unique['Time'].dt.floor('1min')
    
    # 获取每个分钟的基准值(该分钟00秒的Value),并广播到组内所有行
    df_second_unique['base_value'] = df_second_unique.groupby('minute_start')['Value'].transform(
        lambda x: x[x.index == x.index.min()].iloc[0]
    )
    
    # 计算差值:每秒尾值 - 对应分钟基准值
    df_second_unique['Value'] = df_second_unique['Value'] - df_second_unique['base_value']
    
    # 构造输出的Time列:格式为"分钟起始秒-当前秒"
    df_second_unique['Time'] = df_second_unique['minute_start'].dt.strftime('%H:%M:%S') + '-' + df_second_unique['Time'].dt.strftime('%H:%M:%S')
    
    # 整理输出列,保存结果
    out = df_second_unique[['Time', 'Value']].reset_index(drop=True)
    out.index += 1  # 让索引从1开始,匹配示例格式
    out.to_csv(P_opcl_1min, index=True, index_label='Index')
    
    print(out)

关键细节说明

  • 重复记录处理:通过groupby(dt.floor('1S')).last()确保每个时间点只保留最后一条记录,避免重复值干扰计算
  • 基准值提取:用transform方法将每个分钟的起始秒Value广播到该分钟内的所有行,无需额外合并操作
  • 性能优化:针对40万行数据,分组操作均基于datetime的floor处理,Pandas内部已做优化,运行效率有保障
  • 格式匹配:通过strftime构造需求的时间范围字符串,索引从1开始对齐示例输出

内容的提问来源于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.25 01:54:26