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

Python Pandas中Resample().mean()起始点缺失时结果添加至DataFrame的方法

Pandas按10分钟间隔重采样时丢失起始时段均值的批量解决方案

问题背景

  • 需批量处理143个DataFrame,将value列按10分钟间隔(如13:30、13:40)重采样计算均值
  • 数据起始于13:36左右,重采样后13:30-13:40时段的均值丢失,原因是原索引不含13:30这个整点
  • 尝试过调整resample的offset/origin/convention参数、手动循环补值、添加13:30索引行,均未解决问题

解决方案

核心思路:先生成覆盖数据时间范围的完整10分钟整点索引,重采样计算均值后,将时段均值映射回原DataFrame的对应行。

可批量运行的代码

import pandas as pd

def process_single_df(df):
    # 确保索引为datetime类型
    df = df.copy()
    df.index = pd.to_datetime(df.index)
    
    # 生成覆盖数据范围的完整10分钟整点索引
    start_ts = df.index.min().floor('10min')
    end_ts = df.index.max().ceil('10min')
    full_10min_index = pd.date_range(start=start_ts, end=end_ts, freq='10Min')
    
    # 重采样计算均值,并对齐到完整索引
    resampled_avg = df['value'].resample('10Min').mean().reindex(full_10min_index)
    
    # 将对应时段的均值赋值给原DataFrame的每一行
    df['tenminavg'] = df.index.floor('10min').map(resampled_avg)
    
    return df

# 批量处理:假设dfs是包含143个DataFrame的列表
processed_dfs = [process_single_df(df) for df in dfs]

关键逻辑说明

  1. 生成完整索引:通过floor和ceil确定数据覆盖的第一个和最后一个10分钟整点,用date_range生成无缺失的时段索引,确保13:30这类起始前的整点被包含
  2. 重采样对齐:重采样后用reindex绑定完整索引,保证所有时段的均值都被保留(即使原数据没有该整点的索引)
  3. 映射回原数据:用floor('10min')把原数据的每个时间戳归到对应的10分钟时段,再通过map直接获取该时段的均值,实现整时段内所有行的均值填充

原代码问题分析

  • 直接将resample结果赋值给原DataFrame,只会在原索引存在的整点位置填充值,缺失的整点(如13:30)会被跳过
  • 循环中错误地将NaN与字符串"nan"比较(Pandas中NaN是np.nan,不是字符串类型),且索引访问逻辑有误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 10:10:34