首页 > 解决方案 > Pandas 是否有办法仅针对特定日期进行基于时间的聚合?

问题描述

我有几个月的时间序列测量。测量每天最多进行一次,但不是每天都进行。我也有特定的日期,我想计算过去 30 天内的一些指标。日期不一定重叠。我正在寻找一种在 Pandas 中执行此操作的内置方法。

我知道使用带有偏移量的滚动聚合,但这让我的窗口锚定在测量的日子,而不是我真正想要平均值的日子。

我将构建一个示例:

import pandas as pd

T = pd.Timestamp

df = pd.DataFrame({'date': [T(2019, 8, 10),
                            T(2019, 8, 15),
                            T(2019, 8, 18)],
                   'measurement': [5, 4, 7]})

所以这是一个示例数据框:

        date  measurement
0 2019-08-10            5
1 2019-08-15            4
2 2019-08-18            7

这是我知道该怎么做:

df.rolling('30d', on='date', closed='left',
           min_periods=0).aggregate('mean')

输出:

        date  measurement
0 2019-08-10          NaN
1 2019-08-15          5.0
2 2019-08-18          4.5

但这些不是我感兴趣的日期。我真正想要的是提供计算平均值的日期:

dates = [T(2019, 8, 12), T(2019, 8, 20)]

df.rolling('30d', TARGETS=dates, on='date',
           closed='left',
           min_periods=0).aggregate('mean')

输出:

        date  measurement
0 2019-08-12          NaN
1 2019-08-20          5.333333

我知道pandas.DataFrame.rolling实际上并没有内置此功能。有没有办法做到这一点,我错过了?

标签: pythonpandas

解决方案


推荐阅读