熊猫如何在特定范围内逐行增加滚动平均值

时间:2018-09-06 17:41:56

标签: python pandas dataframe

进行滚动操作时,剩下NaN值。我想通过应用足够短的滚动平均值以适合特定行来解决此问题。这是数据示例:

#get the rolling mean from last 7 days 
df = pd.DataFrame(np.random.randint(10, size=10), columns=['values'])
df['rolling7'] = df['values'].rolling(7).mean().round(1)
df.head(10)

   values  rolling7
0  7       NaN
1  6       NaN
2  3       NaN
3  4       NaN
4  0       NaN
5  9       NaN
6  0       4.1
7  1       3.3
8  3       2.9
9  9       3.7

我想用较短的滚动手段来填充NaN:

第0行滚动(1),第1行滚动(2),等等。

我了解为什么我的代码会失败,但是我不知道如何解决该增量:

m = 0
for row in df.loc[0:6]:
        m = ++1
        df['rolling7'] = df['values'].rolling(m).mean().round(1)
df.head(10)

   values   rolling7
0  7        7.0
1  6        6.0
2  3        3.0
3  4        4.0
4  0        0.0
5  9        9.0
6  0        0.0
7  1        1.0
8  3        3.0
9  9        9.0
# and I don't know why it went through entire df even if I specified the rows

1 个答案:

答案 0 :(得分:0)

.rolling在窗口之后带有一个可选参数min_periods,该参数将为您提供所需的行为。通过将其设置为1,它将为每一行提供最长的滚动平均值:

In [14]: df = pd.DataFrame(np.random.randint(10, size=10), columns=['values'])
    ...: df['rolling7'] = df['values'].rolling(7, 1).mean().round(1)
    ...: df.head(10)
    ...:
Out[14]:
   values  rolling7
0       9       9.0
1       0       4.5
2       1       3.3
3       7       4.2
4       9       5.2
5       7       5.5
6       1       4.9
7       3       4.0
8       5       4.7
9       3       5.0

关于为什么您的代码无法正常工作,有两个大问题。首先,m = ++1m = 1相同,因此它永远不会更改其中的值。您可能打算使用m += 1。每次您为整个df['rolling7'] = df['values'].rolling(m).mean().round(1)分配rolling7时,第二df都会在整个列上操作。