반응형
Notice
Recent Posts
Recent Comments
Link
개발은 처음이라 개발새발
merge()함수로 데이터프레임 병합하기2 [python/pandas] 본문
반응형
https://data-so-hard.tistory.com/50
지난 1편에 이어서 merge 함수의 옵션에 대해 알아보겠습니다. 이번 시간에는 'how=' 옵션에 대해 알아보려고 하는데요. how 옵션을 통해서는 왼쪽과 오른쪽을 기준으로 데이터 값을 병합합니다. 또한 left_on과 right_on 옵션을 사용하면 좌우 데이터프레임의 키값을 다르게 지정할 수 있습니다. 우선 데이터들을 보겠습니다.
import pandas as pd
df1= pd.read_excel('./stock price.xlsx')
df2= pd.read_excel('./stock valuation.xlsx')
print(df1)
print('\n')
print(df2)
print('\n')
#df1
id stock_name value price
0 128940 한미약품 59385.666667 421000
1 130960 CJ E&M 58540.666667 98900
2 138250 엔에스쇼핑 14558.666667 13200
3 139480 이마트 239230.833333 254500
4 142280 녹십자엠에스 468.833333 10200
5 145990 삼양사 82750.000000 82000
6 185750 종근당 40293.666667 100500
7 192400 쿠쿠홀딩스 179204.666667 177500
8 199800 툴젠 -2514.333333 115400
9 204210 모두투어리츠 3093.333333 3475
#df2
id name eps bps per pbr
0 130960 CJ E&M 6301.333333 54068 15.695091 1.829178
1 136480 하림 274.166667 3551 11.489362 0.887074
2 138040 메리츠금융지주 2122.333333 14894 6.313806 0.899691
3 139480 이마트 18268.166667 295780 13.931338 0.860437
4 145990 삼양사 5741.000000 108090 14.283226 0.758627
5 161390 한국타이어 5648.500000 51341 7.453306 0.820007
6 181710 NHN엔터테인먼트 2110.166667 78434 30.755864 0.827447
7 185750 종근당 3990.333333 40684 25.185866 2.470259
8 204210 모두투어리츠 85.166667 5335 40.802348 0.651359
9 207940 삼성바이오로직스 4644.166667 60099 89.790059 6.938551
저는 df1을 왼쪽으로 기준 삼아 df2와 병합을 해보려합니다. 그리고 같은 회사명을 담고 있지만 컬럼명이 다른 stock_name과 name 각각 left_on, right_on으로 지정해서 병합하겠습니다.
#왼쪽 기준으로 병합하기
merge_left= pd.merge(df1, df2, how='left', left_on='stock_name',right_on='name')
print(merge_left)
#merge_left
id_x stock_name value price id_y name eps bps per pbr
0 128940 한미약품 59385.666667 421000 NaN NaN NaN NaN NaN NaN
1 130960 CJ E&M 58540.666667 98900 130960.0 CJ E&M 6301.333333 54068.0 15.695091 1.829178
2 138250 엔에스쇼핑 14558.666667 13200 NaN NaN NaN NaN NaN NaN
3 139480 이마트 239230.833333 254500 139480.0 이마트 18268.166667 295780.0 13.931338 0.860437
4 142280 녹십자엠에스 468.833333 10200 NaN NaN NaN NaN NaN NaN
5 145990 삼양사 82750.000000 82000 145990.0 삼양사 5741.000000 108090.0 14.283226 0.758627
6 185750 종근당 40293.666667 100500 185750.0 종근당 3990.333333 40684.0 25.185866 2.470259
7 192400 쿠쿠홀딩스 179204.666667 177500 NaN NaN NaN NaN NaN NaN
8 199800 툴젠 -2514.333333 115400 NaN NaN NaN NaN NaN NaN
9 204210 모두투어리츠 3093.333333 3475 204210.0 모두투어리츠 85.166667 5335.0 40.802348 0.651359
merge()함수를 불린 인덱싱과 함께 사용하면 원하는 데이터를 추출할 수 있는데요. 이번에는 df1에서 price 컬럼이 50000미만인 종목을 찾아 이를 df2와 병합시켜보도록 하겠습니다.
#불린 인덱싱과 결합하여 원하는 데이터 찾기
price = df1[df1['price'] < 50000]
print(price , '\n')
value = pd.merge(price, df2)
print(value)
id stock_name value price
2 138250 엔에스쇼핑 14558.666667 13200
4 142280 녹십자엠에스 468.833333 10200
9 204210 모두투어리츠 3093.333333 3475
id stock_name value price name eps bps per pbr
0 204210 모두투어리츠 3093.333333 3475 모두투어리츠 85.166667 5335 40.802348 0.651359
네 이렇게 price가 50000미만인 데이터 중 df1과 df2 모두 공통으로 있는데 데이터를 추출해냈습니다. 다음 시간에는 데이터그룹 연산에 대해 알아보도록 하겠습니다.
반응형
'파이썬 > 판다스' 카테고리의 다른 글
[Pandas] Indexer의 종류 (0) | 2024.03.14 |
---|---|
df.rename 데이터프레임 컬럼명 변경하기[python/pandas] (0) | 2022.12.11 |
merge()함수로 데이터프레임 병합하기 [python/pandas] (0) | 2022.09.03 |
concat() 함수로 여러 데이터프레임 합치기 [python/pandas] (0) | 2022.08.21 |
파이썬 열 분리 [python/pandas] (1) | 2022.08.20 |