Skip to content Skip to sidebar Skip to footer

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 NaNs 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"