25 lines
1.3 KiB
Python
25 lines
1.3 KiB
Python
import pandas as pd
|
|
import numpy as np
|
|
import quantcommon as qc
|
|
|
|
#가치주 포트폴리오. PER, PBR이 낮은 회사 20개
|
|
def get_value_top(count):
|
|
ticker_list = qc.QuantCommon().get_ticker_list()
|
|
value_list = qc.QuantCommon().get_value_list()
|
|
|
|
# 가치 지표가 0이하인 경우 nan으로 변경
|
|
value_list.loc[value_list['값'] <= 0, '값'] = np.nan
|
|
# 가치지표 테이블을 가로로 긴 형태로 변경
|
|
value_pivot = value_list.pivot(index='종목코드', columns='지표', values='값')
|
|
# 티커 테이블과 가치 지표 테이블을 합침
|
|
data_bind = ticker_list[['종목코드', '종목명']].merge(value_pivot,
|
|
how='left',
|
|
on='종목코드')
|
|
# rank() 함수로 PER, PBR 열의 순위를 구함. axis=0을 입력하여 순위는 열 방향으로 구함.(PER, PBR 각각 순위)
|
|
value_rank = data_bind[['PER', 'PBR']].rank(axis = 0)
|
|
# axis=1을 통해서 위에서 구한 순위 랭크를 합침. 합친 것을 다시 rank()
|
|
value_sum = value_rank.sum(axis = 1, skipna = False).rank()
|
|
return data_bind.loc[value_sum <= count, ['종목코드', '종목명', 'PER', 'PBR']]
|
|
|
|
if __name__ == '__main__':
|
|
print(get_value_top(20)) |