首页 > 解决方案 > 聚合和分发时间序列数据

问题描述

我在熊猫数据框中有一些时间序列数据,如下所示:

开始 结尾 mw_values
2021-09-14 11:16:00 2021-09-14 11:27:11 0
2021-09-14 11:27:11 2021-09-14 11:30:00 100
2021-09-14 11:30:00 2021-09-14 11:33:59 1200
2021-09-14 11:33:59 2021-09-14 11:39:42 600
2021-09-14 11:39:42 2021-09-14 11:59:59 400

我需要将 mw_values 的总和分配到 15 分钟的时间段中,如下所示:

time_slots_15_min sum_mw_values
2021-09-14 11:00 0
2021-09-14 11:15 100
2021-09-14 11:30 2200
2021-09-14 11:45 0
2021-09-14 12:00 0

有人知道我怎么能做到这一点吗?

请注意,开始和结束之间的间隔可能会重叠 2 个时隙。那么该值必须包含在它开始的时隙的总和中;例如,上面示例中的 mw_value 为 400。

标签: pythonpandastime-seriesrolling-computationpandas-resample

解决方案


您可以重新采样您的数据框,以便在 15 分钟的 bin 中汇总数据。然后您可以重新索引该帧,使其与您所需的开始/结束/频率时间相匹配。

freq = "15min"
new_index = pd.date_range(
    "2021-09-14 11:00:00", "2021-09-14 12:00:00", freq=freq
)

out = (
    df.resample(freq, on="begin")["mw_values"]
    .sum()
    .reindex(new_index, fill_value=0)
    .to_frame("sum_mw_values")
)

print(out)
                     sum_mw_values
2021-09-14 11:00:00              0
2021-09-14 11:15:00            100
2021-09-14 11:30:00           2200
2021-09-14 11:45:00              0
2021-09-14 12:00:00              0

推荐阅读