我有每日数据,想计算每个用户的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 .....
每天的行数约为一百万。如果90天的数据太多,则30天就可以了
答案 0 :(得分:0)
如果数据集采用DataFrame格式,则可以在数据集中应用string input;
int year, month, day;
cin >> input; // input can be 2005:03:09 or 2005/04/02 or whatever
stringstream ss(input);
char ch;
ss >> year >> ch >> month >> ch >> day;
方法。
rolling()
如果需要不同的窗口来计算移动平均值,只需更改your_df['MA_30_days'] = df[where_to_apply].rolling(window = 30).mean()
参数。在我的示例中,我使用了window
进行计算,但您也可以选择其他一些统计信息。
此代码将创建另一个名为'MA_30_days'的列,并在您的DataFrame中计算出移动平均值。
您还可以创建另一个DataFrame,在其中收集和循环数据集以计算所有移动平均值,并根据需要将其保存为CSV格式。
mean()
在您进行计算时,应仅考虑最新数据。如果要对最新数据执行此操作,请对其进行切片。但是,第一行将是your_df.to_csv('filename.csv')
(取决于NaN
)。
window
这将计算某些df中特定列的最后90行的移动平均值,而前29行将为df[where_to_apply][-90:].rolling(window = 30).mean()
。如果最新的90行应该都是有意义的数据,则可以比最后90行更早地开始计算-取决于NaN
的大小。