Pandas Rolling Values
How do I obtain the rolling values of some length n of a pandas series of value ? For example, if I have the following: df = pd.DataFrame({'temperature': [0, 1, 2, np.nan, 4, 2, 0.
Solution 1:
I think you need first add NaN
s and then this solution:
N = 3
x = np.concatenate([[np.nan] * (N-1), df['temperature'].values])
def rolling_window(a, window):
shape = a.shape[:-1] + (a.shape[-1] - window + 1, window)
strides = a.strides + (a.strides[-1],)
return np.lib.stride_tricks.as_strided(a, shape=shape, strides=strides)
print (rolling_window(x, N))
[[ nan nan 0. ]
[ nan 0. 1. ]
[ 0. 1. 2. ]
[ 1. 2. nan]
[ 2. nan 4. ]
[ nan 4. 2. ]
[ 4. 2. 0.8 ]
[ 2. 0.8 4. ]
[ 0.8 4. 8.8 ]
[ 4. 8.8 7.12]]
Solution 2:
Even though the thread is old, maybe it will help someone else. I'm a beginner, but I solved user5805065's question by following procedure. Maybe, someone can make it more elegant and efficient.
- converting Pandas series to NumPy:
rollTemperature = df['temperature'].values
- then I've created numpy array in a for loop with some initial variables:
period = 2
stop = len(rollTemperature)
diffRoll = np.zeros(stop)
for i in range(0,stop):
if i == 0:
diffRoll[i] = np.nan
elif np.mod(i,period)!=0:
diffRoll[i] = np.nan
else:
diffRoll[i] = (rollTemperature[i] + rollTemperature[i-period])/2
- than adding numpy array to existin dataFrame:
df['diffRoll'] = diffRoll
Than the output is:
temperature diffRoll
0 0.00 NaN
1 1.00 NaN
2 2.00 1.0
3 NaN NaN
4 4.00 3.0
5 2.00 NaN
6 0.80 2.4
7 4.00 NaN
8 8.80 4.8
9 7.12 NaN
Post a Comment for "Pandas Rolling Values"