问题
The Pandas documentation http://pandas.pydata.org/pandas-docs/stable/computation.html has an example of how to calculate moving averages:
ser = pd.Series(np.random.randn(10), index=pd.date_range('1/1/2000', periods=10))
pd.rolling_window(ser, 5, 'boxcar')
The second line calculates a rolling average with a window of 5 and equal weights on each of the five observations. The docs refer tantalizingly to the possibility of using custom weights ("When passing a win_type instead of explicitly specifying the weights..."), but how do you do it?
Thanks!
回答1:
I'm not Math expert, but stahlous explain what you need here.
I try test it:
import pandas as pd
ser = pd.Series([1,1,1], index=pd.date_range('1/1/2000', periods=3))
print ser
rm1 = pd.rolling_window(ser, window=[2,2,2], mean=False)
rm2 = pd.rolling_window(ser, window=[2,2,2]) #, mean=True
print rm1
#
#2000-01-01 NaN
#2000-01-02 NaN
#2000-01-03 6
#Freq: D, dtype: float64
print rm2
#
#2000-01-01 NaN
#2000-01-02 NaN
#2000-01-03 1
#Freq: D, dtype: float64
I setting window
to ndarray
([2,2,2]
) and calculated weighted sum (rm1
) and weighted mean (rm2
).
pandas.rolling_window:
window : int or ndarray:
Weighting window specification. If the window is an integer, then it is treated as the window length and win_type is requiredmean : boolean, default True
If True computes weighted mean, else weighted sum
来源:https://stackoverflow.com/questions/32368078/how-do-i-calculate-a-rolling-mean-with-custom-weights-in-pandas