Python 如何在特定范围内逐行增加滚动平均值
在执行滚动操作时,我只剩下NaN值。我想通过应用足够短的滚动平均值来解决这个问题,以适合特定的行。以下是数据示例: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
#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
,对整个列进行操作