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

如何用Pandas按一天中不同时间点分组计算均值与方差?

用Pandas按每日时间点分组计算时序数据的均值和方差

需求说明

现有设备每日每15分钟采集的浓度(concentrate)时序数据,存在部分时段缺失,需要按一天中的具体时间点(如00:00:00、00:15:00)对所有日期的数据分组,计算每组的均值和方差。

实现步骤及代码

  • 1. 读取并预处理数据
    首先读取数据,同时将timestamp列解析为datetime类型,确保后续能正确提取时间信息:

    import pandas as pd
    
    # 读取CSV数据,parse_dates参数自动将timestamp列转为datetime格式
    df = pd.read_csv('your_data_file.csv', parse_dates=['timestamp'])
    

    如果数据是直接提供的文本格式,也可以用pd.read_csv从字符串读取:

    data_text = """timestamp,concentrate
    2019-08-01 00:00:00,872.0
    2019-08-01 00:15:00,668.0
    ..."""
    from io import StringIO
    df = pd.read_csv(StringIO(data_text), parse_dates=['timestamp'])
    
  • 2. 提取每日时间作为分组键
    从timestamp中提取时分秒部分,作为分组的依据:

    # 新增time_of_day列,存储时间的时分秒信息
    df['time_of_day'] = df['timestamp'].dt.time
    
  • 3. 分组计算均值和方差
    使用groupby按time_of_day分组,通过agg方法同时计算均值和方差。注意Pandas的var()默认是样本方差(自由度ddof=1),若需要总体方差,需指定ddof=0:

    # 计算样本均值和样本方差
    result = df.groupby('time_of_day')['concentrate'].agg(mean='mean', sample_variance='var')
    
    # 若需要总体方差,修改为:
    result = df.groupby('time_of_day')['concentrate'].agg(
        mean='mean',
        population_variance=lambda x: x.var(ddof=0)
    )
    
  • 4. 补全缺失时间点(可选)
    如果部分15分钟间隔的时间点没有数据,分组结果中会缺失这些行。可以生成完整的时间序列并重新索引,补全缺失项:

    # 生成一天内所有15分钟间隔的时间点
    full_time_points = pd.date_range(start='00:00:00', end='23:45:00', freq='15min').time
    # 重新索引,缺失值填充为NaN
    result = result.reindex(full_time_points)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 12:54:25