无窗口大小的Pandas移动平均或滚动均值
我该如何计算一个滚动平均值,或者说移动平均值,让我考虑到我到目前为止看到的所有项目。
假设我有一个如下的数据框:
col new_col
0 1 1
1 2 1.5
2 3 2
等等。 现在我想添加一个新列,计算到目前为止这一列中所有项目的平均值。 如果指定一个窗口大小,那我会得到前面几个值是NaN(也就是没有值),然后它才会开始计算滚动窗口。但我需要的正是上面那种情况。
1 个回答
0
下面这段代码正好能完成你想要的功能。不过还有很多可以改进的地方。它使用了一个for循环和if-else语句。其实有更快的方法可以用向量化的函数来实现这个功能。如果你不加上 pd.options.mode.chained_assignment = None
这一部分的话,它还会触发一个警告,叫做 SettingsWithCopyWarning。
不过这段代码确实能完成任务:
# Libraries
import pandas as pd
import numpy as np
# Settings
pd.options.mode.chained_assignment = None
# Dataframe with desired input
df = pd.DataFrame({'col':[1,2,3]})
# Make room for a new column
df['new_col'] = np.nan
# Fill the new column with values
for i in df.index + 1:
if i == 0:
df['new_col'].iloc[i] = np.nan
else:
df['new_col'].iloc[i-1] = pd.rolling_mean(df.col.iloc[:i].values, window = i)[-1]
print(df)