인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

UnknowN님의 프로필 이미지
UnknowN

작성한 질문수

파이썬(Python)으로 데이터 기반 주식 퀀트 투자하기 Part2

df . append 또는 cocnat, merge, join 등을 (axis=1) 방향으로 병합할 때

작성

·

199

0

질문 드려요!

 

df를 axis=1 방향 -> 이쪽방향으로 추가하려고 합니다.

이 때,

 

df1 = pd.DataFrame()

for i in dflist:

  df1 = pd.concat([df1, i], axis=1, join='outer') 

 

대략 이런식으로 설정하려고 합니다.

그리고 매월 혹은 분기마다 종목들이 설정되게 하려고합니다.

 

해당코드가 '멀티팩터'에서 사용되는데,

밸류팩터에서 1개종목, 모멘텀팩터에서 1개종목, 퀄리티팩터에서 1개종목, 배당팩터에서 1개종목

 

이렇게 해서 매 분기 4종목씩 소팅이 되게 하려하는 목적입니다.

그리고 그 4개 종목에 동일배분을 하려고 하고요!!

다만, 한 분기에 모멘텀팩터와 밸류펙터에서 같은 종목을 선택하는 경우에

그 분기에는 3개종목만 픽 하게 됩니다.

 

이 때, 데이터프레임에 3개 종목만 골라지게 되면 

원래 4개 종목일 땐 각 팩터당 25%씩 투자해서 sum=100% 를 맞춰주는건데

3개 종목으로 소팅 되면 2개 팩터가 1개 팩터를 골랐을 때 그 1개종목엔 50%를 주고, 나머지 각 팩터의 각 종목(2개)는 25%씩

줘야 하는게 로직 상 맞습니다.

 

다만, 이렇게 했을 때 코드 차원에서 df를 axis=1 방향으로 추가할 때 인덱스를 종목으로 주어서 axis=0방향으로도 추가가 되는데

컬럼이 axis=1방향으로 df들이 결합될 때 늘어나는 row에서 코딩이 같은 종목을 중복값 처리 해버리네요...

 

 

이런식으로요!!  A라는 종목이 한 번 더 row 밑으로 추가가 되어야 하는데 컬럼에서 값이 있다보니 그 값을 사용하면서

중복처리가 되어버립니다 ㅠ_ㅠ

 

append 도 사용해보고 join 도 사용해보고 ignore index 무시도 해보고, 모든 경우의 수를 다 해보았는데

안되어서.. 이럴 때 어떻게 해야하는지 코드좀 요청 드립니다 ;ㅅ;

 

혹시 이럴 때 if문을 사용해서 ~~가 ~~일 때에는 중복 무시 이런식으로 컨디셔너 소팅을 for loop 안에 해야하는지요.

 

 

답변 1

0

DeepingSauce님의 프로필 이미지
DeepingSauce
지식공유자

안녕하세요!

제가 질문을 잘 이해못한것 같은데, 아래 3가지를 간단한 예시로 올려주실 수 있을까요?

- input dataframe(s)

- 기대한 output dataframe

- 원하는 output dataframe

UnknowN님의 프로필 이미지
UnknowN

작성한 질문수

질문하기