基本面选股
数据处理
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 df
def standardize(df):
df_std = df.std()
df_mean = df.mean()
return (df - df_mean) / df_std
S_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()