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

如何合并多个含DatetimeIndex的DataFrame并计算日均值?

解决DataFrame合并后计算日均值的问题

你的核心问题是分组逻辑不对:当前代码用groupby('sensor')是按每个精确到分钟的时间戳分组,每个分组只有一条记录,所以计算出的"均值"其实就是原数据本身,并没有按天聚合。

下面是两种修正方案,你可以根据习惯选择:

方案一:保留DatetimeIndex直接按天分组(更简洁)

这种方式不需要重置索引,直接利用原DataFrame的DatetimeIndex进行按天聚合:

import pandas as pd

def join_data(datalist):
    # 合并所有DataFrame,保留原有的DatetimeIndex
    joined = pd.concat(datalist)
    # 使用pd.Grouper按日历日(freq='D')分组,计算各列均值
    daily_means = joined.groupby(pd.Grouper(freq='D')).mean()
    return daily_means

方案二:重置索引后按日期字段分组

如果你需要保留sensor列作为普通列,也可以先重置索引,再提取日期进行分组:

import pandas as pd

def join_data(datalist):
    joined = pd.concat(datalist).reset_index()
    # 确保`sensor`列是datetime类型(如果原始数据的索引已经是datetime,这一步可省略)
    joined['sensor'] = pd.to_datetime(joined['sensor'])
    # 提取日期部分作为分组依据
    daily_means = joined.groupby(joined['sensor'].dt.date).mean()
    # 可选:将索引转换为带UTC时区的datetime,和你的预期输出格式一致
    daily_means.index = pd.to_datetime(daily_means.index).tz_localize('UTC')
    return daily_means

关键说明:

  • pd.Grouper(freq='D')会自动识别DatetimeIndex,并按完整日历日聚合数据,不管你的原始数据是15分钟间隔还是其他频率。
  • 如果你的时间索引带时区(比如示例中的+00:00),两种方案都会保留时区信息,最终生成的索引格式和你预期的一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 04:37:46