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

如何计算分钟级时间差并重新填充DataFrame

问题

我有一份已转换为DataFrame的时间序列数据,第一列为timestamp(列名date),其余列的列名也都是timestamp格式。原始DataFrame如下:

date                   2022-01-02 10:20:00   2022-01-02 10:25:00  2022-01-02 10:30:00  2022-01-02 10:35:00   2022-01-02 10:40:00   2022-01-02 10:45:00  2022-01-02 10:50:00   2022-01-02 10:55:00   2022-01-02 11:00:00
2022-01-02 10:30:00        25.5                  26.3                  26.9                 NaN                  NaN                NaN                        NaN                  NaN                   NaN
2022-01-02 10:45:00        60.3                  59.3                  59.2                 58.4                 56.9               58.0                     NaN                  NaN                   NaN
2022-01-02 11:00:00        43.7                  43.9                  48                   48                   48.1               48.9                        49                  49.5                  49.5

注意:当date列的值与列名匹配时,该列之后的所有数值均为NaN。

我希望将列名改为相对于date列对应行的分钟差值(格式如40mins、35mins…0mins),并对应填充数值,目标DataFrame如下:

date                   40mins      35mins       30mins      25mins       20mins       15mins        10mins      5mins      0mins
2022-01-02 10:30:00     24*        24*           24.8*       24.8*         25*          25*          25.5        26.3      26.9   
2022-01-02 10:45:00     59*        58*           60*         60.3         59.3          59.2         58.4        56.9      58.0   
2022-01-02 11:00:00     43.7        43.9         48          48           48.1          48.9         49          49.5      49.5   

示例说明:

  • 2022-01-02 10:30:00与2022-01-02 10:30:00的时间差为0分钟,对应值为26.9;
  • 2022-01-02 10:30:00与2022-01-02 10:25:00的时间差为5分钟,对应值为26.3,以此类推。

注:带*的值为示例占位符,实际DataFrame包含更多列。

解决方案

步骤1:统一时间格式

先将DataFrame的索引(date列)和所有列名转换为datetime类型,方便后续计算时间差:

import pandas as pd

# 假设原始数据已读入变量df
df.index = pd.to_datetime(df.index)
df.columns = pd.to_datetime(df.columns)

步骤2:计算时间差并重组数据

遍历每行数据,计算当前行索引时间与各列名的分钟差,筛选有效数据后补全缺失的时间差列(对应占位符),最后按目标列顺序排序:

# 定义时间间隔(根据数据规律为5分钟)
interval = 5
# 目标列的最大时间差(根据示例为40分钟)
max_diff = 40

processed_rows = []
for idx, row in df.iterrows():
    # 筛选当前行非NaN的列
    valid_cols = row.dropna().index
    # 计算时间差(取正值,单位:分钟)
    time_diffs = (idx - valid_cols).total_seconds() // 60
    # 构建时间差列名与对应值的字典
    temp_data = {f"{int(diff)}mins": row[col] for diff, col in zip(time_diffs, valid_cols)}
    
    # 补全所有需要的时间差列,缺失值用占位符填充
    for diff in range(max_diff, -1, -interval):
        col_name = f"{diff}mins"
        if col_name not in temp_data:
            temp_data[col_name] = "24*"  # 替换为你需要的占位符
    
    # 按目标列顺序整理数据,添加date索引
    sorted_data = {col: temp_data[col] for col in [f"{d}mins" for d in range(max_diff, -1, -interval)]}
    sorted_data['date'] = idx
    processed_rows.append(sorted_data)

# 转换为目标格式的DataFrame
result_df = pd.DataFrame(processed_rows).set_index('date')

步骤3:验证输出

运行上述代码后,result_df将与目标格式完全一致,缺失的数值会被填充为指定的占位符。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 12:15:44