给定一个以下格式的 pandas 数据框:
toy = pd.DataFrame({
'id': [1,2,3,
1,2,3,
1,2,3],
'date': ['2015-05-13', '2015-05-13', '2015-05-13',
'2016-02-12', '2016-02-12', '2016-02-12',
'2018-07-23', '2018-07-23', '2018-07-23'],
'my_metric': [395, 634, 165,
144, 305, 293,
23, 395, 242]
})
# Make sure 'date' has datetime format
toy.date = pd.to_datetime(toy.date)
The my_metric
列包含一些(随机)指标,我希望计算一个与时间相关的移动平均值,以该列为条件id
并在我自己指定的某个指定时间间隔内。我将把这个时间间隔称为“回溯时间”;可能需要 5 分钟
或2年。为了确定回溯计算中要包含哪些观测值,我们使用date
列(如果您愿意,可以是索引)。
令我沮丧的是,我发现使用 pandas 内置函数不容易执行这样的过程,因为我需要有条件地执行计算
在id
同时,计算只能对回溯时间内的观察进行(使用date
柱子)。因此,输出数据帧应该由每一行组成id
-date
组合,与my_metric
现在,该列是回溯时间内(例如 2 年,包括今天的日期)内包含的所有观察值的平均值。
为了清楚起见,我在使用 2 年回溯时间时包含了具有所需输出格式的图形(对过大的图形表示歉意):
我有一个解决方案,但它没有使用特定的 pandas 内置函数,并且可能不是最优的(列表理解和单个 for 循环的组合)。我正在寻找的解决方案不会使用 for 循环,因此更具可扩展性/高效/快速。
谢谢你!