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

如何对datetime格式索引的DataFrame指定行子集进行列值求和

pandas Datetime索引按时间范围子集求和实现方法

核心操作步骤

  • 第一步:确认索引为标准datetime格式
    如果你的索引还没转成时间类型,先执行转换,否则时间切片会失效:
    import pandas as pd
    data.index = pd.to_datetime(data.index)
    
  • 第二步:按指定时间范围切片取子集
    pandas对DatetimeIndex原生支持字符串标签切片,规则为左闭右闭(起止时间对应的行都会被包含),不需要写复杂的布尔判断:
    # 替换成你需要的起止时间即可
    start_time = '2022-03-18 07:37:51'
    end_time = '2022-03-18 07:37:55'
    subset = data.loc[start_time:end_time]
    
  • 第三步:对子集按列求和
    直接调用sum()方法即可得到所有数值列在该时间范围内的总和:
    # 加numeric_only=True可以自动跳过非数值列,避免类型报错
    sum_res = subset.sum(numeric_only=True)
    
    此时sum_res是一个Series,索引为原DataFrame的列名,值为对应列的区间求和结果。

追加求和结果到原表

如果你需要把求和结果作为单独一行拼接在原DataFrame末尾,和预期效果一致,可以按如下代码操作:

# 将求和结果转为行格式,设置自定义行索引
sum_row = sum_res.to_frame().T
sum_row.index = [f'{start_time} ~ {end_time} 求和']
# 拼接回原表
final_data = pd.concat([data, sum_row])

补充说明

  • 时间切片支持简写:如果要取某一天/某一小时的所有数据,不需要写全时间,比如data.loc['2022-03-18']可取当天所有行,data.loc['2022-03-18 07']可取当天7点的所有行。
  • 布尔索引等效写法:如果习惯用条件筛选,也可以用如下写法取子集,效果和切片完全一致:
    subset = data[
        (data.index >= pd.Timestamp(start_time))
        & (data.index <= pd.Timestamp(end_time))
    ]
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.07 16:15:41