merge 는 특정 컬럼값을 기준으로 데이터를 병합하고, join 은 인덱스를 기준으로 데이터를 병합한다.
how 옵션에는 left, right, outer, inner 옵션이 있다. how 옵션을 지정하지 않으면 기본 옵션은 left 입니다.
df1
----------------------------------------------------------
종목코드 종목명 현재가
업종
전기전자 005930 삼성전자 74400
화학 051910 LG화학 896000
서비스업 035720 카카오 121500
df2
----------------------------------------------------------
등락률
항목
은행 2.92
보험 0.37
화학 0.06
전기전자 -2.43
df1.join(other=df2)
----------------------------------------------------------
종목코드 종목명 현재가 등락률
업종
전기전자 005930 삼성전자 74400 -2.43
화학 051910 LG화학 896000 0.06
서비스업 035720 카카오 121500 NaN
아래 샘플에서 연도별 평균을 시가총액을 계산하여 join 해보겠습니다.
df
----------------------------------------------------------
연도 회사 시가총액
0 2017 삼성 500
1 2017 LG 300
2 2017 SK하이닉스 200
3 2018 삼성 600
4 2018 LG 400
5 2018 SK하이닉스 300
df_mean = df.groupby("연도")["시가총액"].mean().to_frame()
df_mean.columns = ['시가총액평균']
df_mean
----------------------------------------------------------
시가총액평균
연도
2017 333.333333
2018 433.333333
df = df.join(df_mean, on='연도')
df
----------------------------------------------------------
연도 회사 시가총액 시가총액평균
0 2017 삼성 500 333.333333
1 2017 LG 300 333.333333
2 2017 SK하이닉스 200 333.333333
3 2018 삼성 600 433.333333
4 2018 LG 400 433.333333
5 2018 SK하이닉스 300 433.333333
이렇듯, 인덱스가 없는 경우에는 특정 컬럼을 기준으로 (on="연도") 2개의 테이블 데이터를 join 할 수 있다.
물론, 인덱스를 df 에 인덱스를 설정하고 join 도 가능하다.
시가총액과 시가총액평균을 비교해서 새로운 컬럼을 만들때는 map 을 사용해도 좋지만 dataFrame 에서는 numpy.where 를 사용하는게 조금 더 편리하다.
import numpy as np
df['규모'] = np.where(df['시가총액'] >= df['시가총액평균'], "대형주", "중/소형주")
df
----------------------------------------------------------
연도 회사 시가총액 시가총액평균 규모
0 2017 삼성 500 333.333333 대형주
1 2017 LG 300 333.333333 중/소형주
2 2017 SK하이닉스 200 333.333333 중/소형주
3 2018 삼성 600 433.333333 대형주
4 2018 LG 400 433.333333 중/소형주
5 2018 SK하이닉스 300 433.333333 중/소형주
'Python > Data analysis' 카테고리의 다른 글
[Python] Data Analysis - DataFrame - multi-column (0) | 2023.04.07 |
---|---|
[Python] Data Analysis - DataFrame - multi-index (0) | 2023.04.06 |
[Python] Data Analysis - DataFrame - merge (0) | 2023.04.05 |
[Python] Data Analysis - DataFrame - add data (0) | 2023.04.04 |
[Python] Data Analysis - DataFrame - groupby (0) | 2023.04.04 |