Reputation: 4564
I am trying to calculate moving average of a dataframe column. The column has some nans. I tried an already available solution provided here. However, the result is nans only.
My code:
df =
A
0 10
1 NaN
2 20
3 30
4 40
5 50
6 60
7 NaN
def running_mean(x, N):
cumsum = np.cumsum(np.insert(x, 0, 0))
return (cumsum[N:] - cumsum[:-N]) / float(N)
x = running_mean(df['A'].values, 2)
plt.plot(x)
plt.show()
Present output:
x = array([nan, nan, nan, nan, nan, nan, nan])
Upvotes: 1
Views: 220
Reputation: 26676
Do you mean?
df['mean']=df.A.expanding().mean()
A mean
0 10.0 10.0
1 NaN 10.0
2 20.0 15.0
3 30.0 20.0
4 40.0 25.0
5 50.0 30.0
6 60.0 35.0
7 NaN 35.0
Or did you want
df['meanRolling']=df.A.fillna(0).rolling(2).mean()
A meanRolling
0 10.0 NaN
1 NaN 5.0
2 20.0 10.0
3 30.0 25.0
4 40.0 35.0
5 50.0 45.0
6 60.0 55.0
7 NaN 30.0
Upvotes: 2