如何使用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
相关产品推荐
相关产品推荐

