基本面选股
数据处理
def winsorize(df): q = df.quantile([0.025, 0.975]) if isinstance(q, pd.Series) and len(q) == 2: df[df < q.iloc[0]] = q.iloc[0] df[df > q.iloc[1]] = q.iloc[1] return dfdef standardize(df): df_std = df.std() df_mean = df.mean() return (df - df_mean) / df_stdS_PE = standardize(winsorize(PN.minor_xs('PE')))S_PB = standardize(winsorize(PN.minor_xs('PB')))S_PS = standardize(winsorize(PN.minor_xs('PS')))S_PCF = standardize(winsorize(PN.minor_xs('PCF')))
算法设计
S = -(S_PE+2*S_PB+2*S_PS+0.5*S_PCF)factor = S.stack()