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

如何使用Python Pandas按另一DataFrame的时间值累加指定区间列数据

问题背景

现有第一个DataFrame df1,结构如下:

volume
timestamp
2021-01-04 04:00:00   20
2021-01-04 04:30:00   5
2021-01-04 05:00:00   15
2021-01-04 05:30:00   5
2021-01-04 06:00:00   10
2021-01-04 06:30:00   5
2021-01-04 07:00:00   25
2021-01-04 07:30:00   5
2021-01-04 08:00:00   15
2021-01-05 04:00:00   25
2021-01-05 04:30:00   5
2021-01-05 05:00:00   5
2021-01-05 05:30:00   15
2021-01-05 06:00:00   10
2021-01-05 06:30:00   5
2021-01-05 07:00:00   15
2021-01-05 07:30:00   10
2021-01-05 08:00:00   20
...                  ...

第二个DataFrame df2结构如下:

high
timestamp                          
2021-01-04 05:30:00     134.43
2021-01-05 06:30:00     130.30
...                        ...
需求说明

基于df2中的timestamp值,对df1中对应时间段的volume值分段求和:即统计2021-01-04当日04:00:00到05:30:00的volume总和,2021-01-05当日04:00:00到06:30:00的volume总和,最终得到如下结构的结果DataFrame:

volume_up_to_high
date
2021-01-04      45
2021-01-05      65
...            ... 
Pandas实现代码

以下是最简实现方式:

import pandas as pd

# 1. 统一索引类型为datetime(若已经是datetime类型可跳过)
df1.index = pd.to_datetime(df1.index)
df2.index = pd.to_datetime(df2.index)

# 2. 预处理df2,提取日期维度和对应截止时间
df2_processed = df2.reset_index().assign(
    date = lambda x: x['timestamp'].dt.date
).set_index('date')['timestamp'].rename('cutoff_time')

# 3. 给df1添加日期维度,关联截止时间后过滤符合区间的记录
df1['date'] = df1.index.date
df_merged = df1.join(df2_processed, on='date')
df_filtered = df_merged[
    (df_merged.index >= pd.to_datetime(df_merged['date'].astype(str) + ' 04:00:00'))
    & (df_merged.index <= df_merged['cutoff_time'])
]

# 4. 按日期分组求和得到最终结果
result = df_filtered.groupby('date')['volume'].sum().to_frame('volume_up_to_high')

运行上述代码得到的result就是符合要求的结果,示例数据计算结果和需求中的预期值完全匹配。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 09:15:03