首页 > 解决方案 > 1个熊猫数据框中的时间序列条件滚动平均值

问题描述

我目前正在研究解决条件滚动平均值。我创建了一个简化的数据集来演示:在这个数据集中,我们有 3 家商店和 2 种产品,它们在 4 天内的销售量。

数据集的图片,下载数据集的链接


考虑到真实数据集包括数千家商店和数百种产品,我试图为同一数据框中的商店/产品的每个组合实现滚动平均计算。

通过使用下面的代码,我可以计算每条线的滚动平均值,就像其他数据科学家计算股价的 10 天或 20 天移动平均线一样

import pandas as pd
df = pd.read_csv (r'path\ConditionalRollingMean.csv')
df['Rolling_Mean'] = df.Quantity.rolling(2).mean()

甚至

df['Rolling_Mean'] = df.Quantity.rolling(window=2).mean()

这种方法的问题在于,计算是逐行完成的,与商店/产品组合无关。我正在寻找的是一个条件滚动平均值,它在遍历数据框时跟踪商店/产品组合,并逐行填充df['Rolling_Mean']列。(像这样

然后,此滚动平均值将用于滚动标准偏差计算,为此我只弄清楚了如何在整个数据帧中进行计算,而没有滚动方面。

df['mean']=df.groupby(['Quantity']).Qty.transform('mean')
df['std']=df.groupby(['Quantity']).Qty.transform('std')

将不同数据帧中的商店/产品分开然后运行​​df.Quantity.rolling(2).mean()函数会更简单,但在我正在处理的情况下,这意味着创建超过 150 000 个数据帧. 因此,为什么我要在 1 个数据框中解决这个问题。

预先感谢您的帮助。

标签: pythonpandasdataframeaveragerolling-computation

解决方案


我将使用的解决方案如下:

df["Mean"] = df.groupby(['Store','Product'])['Quantity'].rolling(2).mean()

它给了我想要的输出。谢谢您的意见。


推荐阅读