Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在特定范围内逐行增加滚动平均值_Python_Pandas_Dataframe - Fatal编程技术网

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

Python 如何在特定范围内逐行增加滚动平均值,python,pandas,dataframe,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 r

在执行滚动操作时,我只剩下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

.rolling
在窗口之后接受一个可选参数,
min\u 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=++1
m=1
相同,因此它永远不会改变那里的值。您可能打算
m+=1
。第二个
df['rolling7']=df['values'].rolling(m).mean().round(1)
每次对整个
df
分配
rolling7
,对整个列进行操作