반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- Uipath 설치방법
- selenium
- pycdas.exe
- pywinauto
- 파이썬네이버부동산
- 왕초보 파이썬 실행
- Uipath 기초
- 가상환경설치
- 파이썬 네이버 로그인
- 네이버커머스API
- 커머스API
- 네이버 로그인 하기
- 네이버매물크롤링
- UiPath
- 파이썬 가상환경 설치방법
- 네이버 로그인 영수증 해결
- pycdc.exe
- Element is not clickable at point
- 날짜 정규식
- 파이썬 가상환경 설치
- vscode venv 설치
- Python
- pywinauto 윈도우제어
- pywinauto 윈도우
- 네이버부동산크롤링
- uipath 입문
- venv 설치
- 네이버 로그인 캡챠해결
- Selenium 셀렉터잡기
- 파이썬 환경설정
Archives
- Today
- Total
콘솔워크
[Python] 데이터 프레임 left outer join (특정키로 조인)하고 빈 컬럼 나머지 데이터프레임으로 채우기 merge 본문
프로그래밍/python
[Python] 데이터 프레임 left outer join (특정키로 조인)하고 빈 컬럼 나머지 데이터프레임으로 채우기 merge
콘솔워크 2022. 6. 21. 16:34반응형
내가 원하는 내용이 다소 복잡하여 글로 정리한다.
dataframe 두개가 있다. 각각 df1 그리고 df2라고 지칭하겠다.
일단 먼저 특정 컬럼을 기준으로 LEFT JOIN 하는 코드는 다음과 같다.
KEY 컬럼 ('묶음번호', '주문번호', '구매자')
DATAFRAME LEFT OUTER JOIN 예시
KEYS = ['묶음번호', '주문번호', '구매자']
SUFFIX = '_DROP'
df1 = df1.fillna('')
df2 = df2.fillna('')
merge_df = pd.merge(df1, df2, how='left', on=KEYS,
suffixes=('', SUFFIX))
- SUFFIX의 값은 두번째 DF에 붙는 접미사이다.
특정 컬럼의 값이 빈값인 경우 뒤의 데이터컬럼의 값으로 채우기
import pandas as pd
import numpy as np
NUM_COL = '송장번호'
SUFFIX = '_DROP'
NEW_NUM_COL = NUM_COL + SUFFIX
merge_df[NUM_COL] = np.where(
merge_df[NUM_COL] == '', merge_df[NEW_NUM_COL], merge_df[NUM_COL])
하나의 데이터프레임에 '송장번호'라는 컬럼과 '송장번호_DROP'이라는 컬럼이 있다고 치자.
'송장번호' 컬럼이 빈값일 때만 '송장번호_DROP'의 컬럼으로 채우고 싶을 때 쓰는 코드이다.
여기서 np.where에서의 의미는 '송장번호' 컬럼이 비어있으면 '송장번호_DROP'으로 채우고 비어있지 않으면 그대로 '송장번호' 컬럼으로 사용하라는 뜻이다.
최종코드
import pandas as pd
import numpy as np
def get_merge_df(df1, df2):
KEYS = ['묶음번호', '주문번호', '구매자']
NUM_COL = '송장번호'
DELI_COL = '택배사'
SUFFIX = '_DROP'
NEW_NUM_COL = NUM_COL + SUFFIX
NEW_DELI_COL = DELI_COL + SUFFIX
df1 = df1.fillna('')
df2 = df2.fillna('')
merge_df = pd.merge(df1, df2, how='left', on=KEYS,
suffixes=('', SUFFIX))
merge_df[NUM_COL] = np.where(
merge_df[NUM_COL] == '', merge_df[NEW_NUM_COL], merge_df[NUM_COL])
merge_df[DELI_COL] = np.where(
merge_df[DELI_COL] == '', merge_df[NEW_DELI_COL], merge_df[DELI_COL])
# drop col
merge_df.drop(
[col for col in merge_df.columns if SUFFIX in col], axis=1, inplace=True)
return merge_df
결론
1. 두개의 데이터 프레임을 KEYS 컬럼을 기준으로 left join 한다. 두번째 데이터프레임의 SUFFIX에는 _DROP으로 컬럼을 맞춰준다.
2. 첫번째 데이터프레임의 송장번호가 비어있으면 두번째 데이터프레임의 송장번호로 채운다.
SUFFIX가 붙은 컬럼들은 모두 제거한다.
최종적으로 merge_df가 완성된다.
반응형
'프로그래밍 > python' 카테고리의 다른 글
[Python] dataframe 데이터프레임 컬럼 필터, column value length check, value check (0) | 2022.06.24 |
---|---|
[selenium] selenium으로 네이버 로그인 시 영수증 인증화면이 뜨는 경우 (1) | 2022.06.22 |
[selenium] 크롤링으로 가져온 문자열이 깨져있는 경우 (0) | 2022.06.21 |
[selenium] 셀레니움으로 부모 webelement 찾기 (0) | 2022.06.21 |
[Python] dictionary 내의 모든 key를 int로 변경 (0) | 2022.06.18 |