我有一个pandas DataFrame,想要在滚动窗口中对所有值进行平均值的计算:对于所有列,在滚动窗口内的所有观察值。
我有一个循环解决方案,但感觉非常低效。请注意,我的数据中可能有NaN,因此计算总和并除以窗口的形状不安全(因为我想要一个nanmean)。
有更好的方法吗?
设置
抱歉,我没有理解您需要翻译的具体内容,请提供完整的文本。谢谢!
我有一个循环解决方案,但感觉非常低效。请注意,我的数据中可能有NaN,因此计算总和并除以窗口的形状不安全(因为我想要一个nanmean)。
有更好的方法吗?
设置
import numpy as np
import pandas as pd
np.random.seed(1)
df = pd.DataFrame(np.random.randint(0, 10, size=(10, 2)), columns=['A', 'B'])
df[df>5] = np.nan # EDIT: add nans
抱歉,我没有理解您需要翻译的具体内容,请提供完整的文本。谢谢!
n_roll = 2
df_stacked = df.values
roll_avg = {}
for idx in range(n_roll, len(df_stacked)+1):
roll_avg[idx-1] = np.nanmean(df_stacked[idx - n_roll:idx, :].flatten())
roll_avg = pd.Series(roll_avg)
roll_avg.index = df.index[n_roll-1:]
roll_avg = roll_avg.reindex(df.index)
期望结果
roll_avg
Out[33]:
0 NaN
1 5.000000
2 1.666667
3 0.333333
4 1.000000
5 3.000000
6 3.250000
7 3.250000
8 3.333333
9 4.000000
谢谢!
.shift
,或者堆叠然后在更大的窗口上滚动。 - ALollz