首页 > 解决方案 > 如何使用添加到熊猫数据框中的每日数据来增量计算移动平均值?

问题描述

我有每日数据,想计算每个用户 5 天、30 天和 90 天的移动平均值并写入 CSV。每天都有新数据出现。假设我将使用最近 89 天的数据加上今天的数据加载数据框,我如何仅为新数据计算这些平均值。

日期用户daily_sales 5_days_MA 30_days_MV 90_days_MV 2019-05-01 1 34 2019-05-01 2 20 ....

2019-07-18 .....

每天的行数约为 100 万行。如果90天的数据太多,30天就可以了

标签: pythonpandas

解决方案


rolling()如果它是 DataFrame 格式,您可以在数据集上应用方法。

your_df['MA_30_days'] = df[where_to_apply].rolling(window = 30).mean()

如果您需要计算移动平均线的不同窗口,只需更改window参数即可。在我的示例中,我曾经mean()计算过,但您也可以选择其他一些统计数据。

此代码将在您的 DataFrame 中创建另一个名为“MA_30_days”的列,其中包含计算的移动平均值。

您还可以创建另一个 DataFrame,您将在其中收集和循环您的数据集以计算所有移动平均值并根据需要将其保存为 CSV 格式。

your_df.to_csv('filename.csv')

在你的情况下,计算应该只考虑最新的数据。如果您想对最新数据执行此操作,只需对其进行切片。然而,第一行将是NaN(取决于window)。

df[where_to_apply][-90:].rolling(window = 30).mean()

这将计算某些 df 中特定列的最后 90 行的移动平均值,而前 29 行将是NaN. 如果您最近的 90 行应该都是有意义的数据,那么您可以比最后 90 行更早地开始计算 - 取决于window大小。


推荐阅读