【发布时间】:2018-12-04 08:56:13
【问题描述】:
给定以下格式的 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)
my_metric 列包含一些(随机)指标,我希望以id 列为条件计算其随时间变化的移动平均值
在我自己指定的某个指定时间间隔内。我将这个时间间隔称为“回溯时间”;这可能是 5 分钟
或 2 年。为了确定哪些观察要包含在回溯计算中,我们使用date 列(如果您愿意,它可以是索引)。
令我沮丧的是,我发现使用 pandas 内置函数不容易执行这样的过程,因为我需要有条件地执行计算
在id 上,同时只能根据回溯时间内的观察结果进行计算(使用date 列进行检查)。因此,输出数据框应包含每个id-date 组合的一行,my_metric 列现在是回顾时间内包含的所有观察值的平均值(例如 2 年,包括今天的日期) .
为清楚起见,我在使用 2 年回溯时间时包含了具有所需输出格式的图(对于过大的图表示歉意):
我有一个解决方案,但它没有使用特定的 pandas 内置函数,并且可能不是最佳的(列表理解和单个 for 循环的组合)。我正在寻找的解决方案不会使用 for 循环,因此更具可扩展性/高效/快速。
谢谢!
【问题讨论】:
标签: python pandas moving-average