단순한 데이터프레임을 합치는 경우에는 concat 도 가능하지만 특정 컬럼값을 기준으로 데이터를 병합하기 위해서는 merge 를 사용해야 한다.
2개의 데이터프레임을 merge 하는 방법은 아래와 같다.
df1
---------------------------------
업종 종목코드 종목명 현재가
0 전기전자 005930 삼성전자 74400
1 화학 051910 LG화학 896000
2 전기전자 000660 SK하이닉스 101500
df2
---------------------------------
업종 등락률
0 은행 2.92
1 보험 0.37
2 화학 0.06
3 전기전자 -2.43
merge 에서 inner / outer 의 차이는 아래와 같다.
pd.merge(left=df1, right=df2, on='업종')
----------------------------------------------
업종 종목코드 종목명 현재가 등락률
0 전기전자 005930 삼성전자 74400 -2.43
1 전기전자 000660 SK하이닉스 101500 -2.43
2 화학 051910 LG화학 896000 0.06
pd.merge(left=df1, right=df2, how='inner', on='업종')
----------------------------------------------
업종 종목코드 종목명 현재가 등락률
0 전기전자 005930 삼성전자 74400 -2.43
1 전기전자 000660 SK하이닉스 101500 -2.43
2 화학 051910 LG화학 896000 0.06
pd.merge(left=df1, right=df2, how='outer', on='업종')
----------------------------------------------
업종 종목코드 종목명 현재가 등락률
0 전기전자 005930 삼성전자 74400.0 -2.43
1 전기전자 000660 SK하이닉스 101500.0 -2.43
2 화학 051910 LG화학 896000.0 0.06
3 은행 NaN NaN NaN 2.92
4 보험 NaN NaN NaN 0.37
how 옵션은 left/right 가 있다.
df1
----------------------------------------------------------
업종 종목코드 종목명 현재가
0 전기전자 005930 삼성전자 74400
1 화학 051910 LG화학 896000
2 서비스업 035720 카카오 121500
df2
----------------------------------------------------------
업종 등락률
0 은행 2.92
1 보험 0.37
2 화학 0.06
3 전기전자 -2.43
df = pd.merge(left=df1, right=df2, how='left', on='업종')
df
----------------------------------------------------------
업종 종목코드 종목명 현재가 등락률
0 전기전자 005930 삼성전자 74400 -2.43
1 화학 051910 LG화학 896000 0.06
2 서비스업 035720 카카오 121500 NaN
df = pd.merge(left=df1, right=df2, how='right', on='업종')
df
----------------------------------------------------------
업종 종목코드 종목명 현재가 등락률
0 은행 NaN NaN NaN 2.92
1 보험 NaN NaN NaN 0.37
2 화학 051910 LG화학 896000.0 0.06
3 전기전자 005930 삼성전자 74400.0 -2.43
2개의 데이터프레임에서 기준 컬럼 이름이 다르면 둘다 입력해야 한다. inner 옵션과 동일한 교집합만 추출된다.
df1
----------------------------------------------------------
업종 종목코드 종목명 현재가
0 전기전자 005930 삼성전자 74400
1 화학 051910 LG화학 896000
2 서비스업 035720 카카오 121500
df2
----------------------------------------------------------
항목 등락률
0 은행 2.92
1 보험 0.37
2 화학 0.06
3 전기전자 -2.43
df = pd.merge(left=df1, right=df2, left_on='업종', right_on='항목')
df
----------------------------------------------------------
업종 종목코드 종목명 현재가 항목 등락률
0 전기전자 005930 삼성전자 74400 전기전자 -2.43
1 화학 051910 LG화학 896000 화학 0.06
'Python > Data analysis' 카테고리의 다른 글
[Python] Data Analysis - DataFrame - multi-index (0) | 2023.04.06 |
---|---|
[Python] Data Analysis - DataFrame - join (0) | 2023.04.06 |
[Python] Data Analysis - DataFrame - add data (0) | 2023.04.04 |
[Python] Data Analysis - DataFrame - groupby (0) | 2023.04.04 |
[Python] Data Analysis - DataFrame - sort, rank (0) | 2023.04.04 |