应用于 pandas 数据框的滚动 Z 分数
Rolling Z-score applied to pandas dataframe
我想为我的数据框中的一个列计算滚动 Z 分数:
import pandas as pd
values = [1,2,3,4,5]
d1= {'vol': values}
df= pd.DataFrame(d1)
有没有类似这样的方法:
df['mean'] = df.rolling(2).mean()
可能与:
from scipy import stats
stats.zscore(df)
编辑:在类似的 post:
中找到了这种方法
def zscore_func(x):
return (x[-1] - x[:-1].mean())/x[:-1].std(ddof=0)
df.rolling(window=3).apply(zscore_func)
这是for循环的一种解决方案
n=2
[np.nan]*n+[stats.zscore(df.iloc[x:x+n,0]) for x in range(0,len(df)-n)]
[nan, nan, array([-1., 1.]), array([-1., 1.]), array([-1., 1.])]
window = 2
target_column = 'vol'
roll = df[target_column].rolling(window)
df['z-score'] = (df[target_column] - roll.mean()) / roll.std()
我想为我的数据框中的一个列计算滚动 Z 分数:
import pandas as pd
values = [1,2,3,4,5]
d1= {'vol': values}
df= pd.DataFrame(d1)
有没有类似这样的方法:
df['mean'] = df.rolling(2).mean()
可能与:
from scipy import stats
stats.zscore(df)
编辑:在类似的 post:
中找到了这种方法def zscore_func(x):
return (x[-1] - x[:-1].mean())/x[:-1].std(ddof=0)
df.rolling(window=3).apply(zscore_func)
这是for循环的一种解决方案
n=2
[np.nan]*n+[stats.zscore(df.iloc[x:x+n,0]) for x in range(0,len(df)-n)]
[nan, nan, array([-1., 1.]), array([-1., 1.]), array([-1., 1.])]
window = 2
target_column = 'vol'
roll = df[target_column].rolling(window)
df['z-score'] = (df[target_column] - roll.mean()) / roll.std()