想要在 numpy 中计算移动范围。
使用 Pandas 编写函数,想要简单/快速的方法来返回具有等效值的 numpy 数组。不需要新数组的名称,只需要值。
def get_moving_range(my_series, na_replace_value=None):
"""Returns calculated moving range series object.
Args:
my_series (pandas series): Series to derive moving range from.
na_replace_value (numeric, optional): first value of moving range is nan by default, if different value is desired use this, otherwise leave as None. Defaults to None.
"""
# rename series to keep it easy
my_series.name = 'original'
# convert to DataFrame
df = my_series.to_frame()
# create the offset so I can do the Xn - Xn-1 calculation easy
df['shifted'] = df['original'].shift(1)
# calculate the moving range values
df['Moving Range'] = abs(df['original'] - df['shifted'])
if na_replace_value != None:
df.fillna(value=na_replace_value, inplace=True)
return(df['Moving Range'])
只需使用
def np_moving_range(array, fill_val = None):
return np.r_[fill_val, np.diff(array)]