我如何计算滚动平均值或移动平均线,在此我考虑到目前为止所见的所有项目。
假设我有一个类似下面的数据框
col new_col
0 1 1
1 2 1.5
2 3 2
等等。 现在我想添加一个新列,其中我将col的所有项目的平均值计算到该点。 指定一个窗口意味着我将前几个作为Nan,然后它只做一个滚动窗口。但我需要像上面这样的东西。
答案 0 :(得分:0)
以下代码段将完全符合您的要求。尽管如此,还有很大的改进空间。它使用带有if-else状态的for循环。使用矢量化函数肯定有更快的方法。如果省略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)