본문 바로가기

주식 데이터 분석

[Python] Dataframe을 [컬럼명,인덱스,값] 2차원 리스트로 만들기

국내 주식들간의 상관계수를 구하기 위해 

cor100 = df100.corr(method='pearson').round(3)

로 각 종목간의 상관 계수를 구했음 

결과로 종목명이 인덱스와 컬럼인 df을 만들어짐 

근데 그 리스트의 형태를 [[인덱스명,컬럼명,상관계수],[인덱스명,컬럼명,상관계수],[인덱스명,컬럼명,상관계수]....] 형태로 

각각의 값들을 인덱스와  컬럼과 같이 묶어서 2차원 리스트로 만들려고 함 

 

#df을 dict로 변환 / 2중 dict 구조 {index:{colume:corr},index:{colume:corr},index:{colume:corr}.....}
tmp =cor100.to_dict()
print("tmp : " , tmp)
# 1차원에 있는 dict를 zip로 합쳐서 리스트로 변환
tmp2 = list(map(lambda x: list(zip(x.keys(),x.values())),tmp.values()))
print("tmp2 : " , tmp2)
#2차원 dict의 key값과 tmp2 리스트를 zip으로 매칭
tmp3= list(zip(tmp.keys(),tmp2))
print("tmp3 : " , tmp3)
# 2중으로 람다 사용해서 각 리스와 index 매칭
tmp4 = list(map(lambda x: list(map(lambda y : [x[0]]+list(y),x[1])),tmp3))
print("tmp4 : " , tmp4)
#차원 축소
tmp5 = list(itertools.chain(*tmp4))
print("tmp5 : " , tmp5)

tmp5에서 내가 원하는 대로 결과가 나왔다. 

람다를 이용해서 이래저래 원하는데로 처리가 됬지만 분명 더 빠르고 간단하게 처리가 가능할꺼 같은데 내 코딩 능력으로는 이게 최선인거 같다. 그래도 for문 보다는 빠르지 않을까 싶다.