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.84. ]
[ 0.84.8.8 ]
[ 4.8.87.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 inrange(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
00.00NaN11.00NaN22.001.03NaNNaN44.003.052.00NaN60.802.474.00NaN88.804.897.12NaN
Post a Comment for "Pandas Rolling Values"