hyunyulhenry / quant_py

파이썬을 이용한 퀀트 투자 포트폴리오 만들기
171 stars 90 forks source link

P351 13.7 섹터중립포토폴리오 Z-RANK 관련 실행 불가 관련 문의드립니다 #39

Closed ssong2820 closed 7 months ago

ssong2820 commented 9 months ago

안녕하세요 책 사서 보면서 공부중인데요 P 351 에 하기 코드가 안 먹네요 유투브 동영상 보면 이상없이 실행되시던데... 저는 하니까 z-score가 data_bind 칼럼에 안들어가져서 dataframe이 빈 데이터가 되더라고요

print(data_bind.groupby('SEC_NM_KOR', dropna=False)['return'].apply(stats.zscore, nan_policy='omit')) 상기처럼 실행하면 리스트 형식으로 들어가 있는게 보이는데,

print(data_bind['z-score']) 해당 항목으로 하면 NaN이 됩니다. 인덱스 설정을 해줘야 하는건지... 고민하다가 해결방법을 몰라 문의드립니다.

data_bind.loc[data_bind['SEC_NM_KOR'].isnull(), 'SEC_NM_KOR'] = '기타' data_bind['z-score'] = data_bind.groupby('SEC_NM_KOR', dropna=False)['return'].apply(stats.zscore, nan_policy='omit')

1: print(data_bind.groupby('SEC_NM_KOR', dropna=False)['return'].apply(stats.zscore, nan_policy='omit')) print(data_bind['z-score'])

1: 결과 SEC_NM_KOR IT [0.1436575842145283, -0.5022560341142324, 0.05... 건강관리 [0.4589118861712773, 1.4471044349054212, -0.43... 경기관련소비재 [-0.6546025396542542, -0.7265392401358445, -0.... 금융 [-0.5998644806935471, 0.3806968904761906, -0.6... .....

2: 결과 Name: return, dtype: object 0 NaN 1 NaN 2 NaN 3 NaN 4 NaN ....

hyunyulhenry commented 7 months ago

파이썬 버젼이 업데이트 되면서 기존 함수들이 다 꼬였습니다.

data_bind.loc[data_bind['SEC_NM_KOR'].isnull(), 'SEC_NM_KOR'] = '기타'
data_bind['z-score'] = data_bind.groupby(
    'SEC_NM_KOR', dropna=False)['return'].transform(lambda x: zscore(x, nan_policy='omit'))
data_bind['z-rank'] = data_bind['z-score'].rank(axis=0, ascending=False)
sector_neutral_count = pd.DataFrame(data_bind.loc[data_bind['z-rank'] <= 20,
                                                  'SEC_NM_KOR'].value_counts())

로 하면 됩니다.