inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

단 두 장의 문서로 데이터 분석과 시각화 뽀개기

14) merge로 데이터프레임 합치기 left, right, inner, outer 옵션 사용하기

merge와 그룹바이 관련 질문이 있습니다.

503

전재웅

작성한 질문수 6

1

1. merge 할 때 혹시 이런 조건도 가능한가요? 

sql중에 join하면

select * from x as T1

left join y as T2 on T1.columns1 = T2.columns1

and T1.columns2 <> T2.columns2

이와 같이 두 테이블의 칼럼이 같지 않은 조건을 포함할 수는 없나요? merge를 보면 on 절에 = 조건만 들어가는 것 같아서 문의드립니다. 

 

2. 판다스의 groupby는 널값이 있는 행을 제외하고 그룹바이하는 걸로 아는데 어쩔 수 없이 데이터 자체에 널값이 포함되어 있는 경우 행마다 널값에 대한 사전전처리를 하지 않고 널값을 포함한 채로 그룹바이할 수는 없는건가요? 

sql은 널값을 포함한 채로 그룹바이가 가능한걸로 알고 있어서 문의드립니다.

python pandas

답변 3

0

전재웅

예를 들어 설명을 드리면

 

DF1  

    A B C    T

0   1   2   33   4

 

 

DF2

A  B   D

0 1  2   33

1 1  2   55

2 1  2   66

 

 

DF1을 기준으로 DF2를 붙이는 left merge를 해야 하는데,

칼럼 C의 값과 같지 않은 칼럼 D만 붙이고 싶습니다. 

 

원하는 결과 

 

    A B C     T    D

0   1   2    33    4    55

1   1   2    33    4    66

 

 

sql은 아래처럼 가능한것으로 알고 있는데

 

select * from T1 left join T2 on T1.A = T2.A  on T1.A = T2.A  on T1.A <> T2.A

 

파이썬은 혹시 가능한지 문의드립니다. 

0

박조은

안녕하세요.

아쉽게도 판다스는 on 을 통해서 key 값을 지정하는 형태라 값이 같은 key  에 대해서만 join, merge 가 가능합니다.

[pandas.DataFrame.join — pandas 1.4.2 documentation](https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.join.html)

[pandas.DataFrame.merge — pandas 1.4.2 documentation](https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.merge.html)

 

 

0

전재웅

감사합니다. 강사님,

left_on, right_on은 동등조건일로 알고 있는데요 예를 들면 left_on = T1.columA, right_on=T2.columB와 같이 칼럼이름이 다른경우 라도 칼럼 내용이 같으면 이에 따라 left, right, inner, outer 조인인 것으로 알고 있습니다. sql처럼 columnA와 columnB의 내용이 같이 않을 때 조인도 가능할까요? 

 

 

dropna=False는 멀티인덱싱일 경우 동작을 안하네요.

제가 이 케이스라.. 전처리를 다 하는 수 밖에 없겠네요...

Note that as of this writing, there is a bug that makes dropna=False fail with MultiIndex grouping.

https://stackoverflow.com/questions/18429491/pandas-groupby-columns-with-nan-missing-values

 

0

박조은

안녕하세요.

join 을 할 때는 컬럼 이름에 상관없이 key 가 되는 값이 있어야 연결을 할 수 있습니다. 내용이 다른데 조인이 가능하다는게 어떤 의미인지 다시 질문해 주시겠어요? 기준이 되는 값이 있어야 연결을 해줄 수 있습니다.

0

박조은

안녕하세요.

 

1)  left_on, right_on 등으로 사용해 볼 수 있습니다.

DataFrame.merge(righthow='inner'on=Noneleft_on=Noneright_on=Noneleft_index=Falseright_index=Falsesort=Falsesuffixes=('_x', '_y')copy=Trueindicator=Falsevalidate=None)

문서 링크 입니다 : [pandas.DataFrame.merge — pandas 1.4.2 documentation](https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.merge.html)

2) dropna=False 로 사용해 보세요!

문서 링크 입니다 :  [pandas.DataFrame.groupby — pandas 1.4.2 documentation](https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.groupby.html)

 

날짜변환 에러

0

267

0

업로드자료 오류

1

385

1

20강 관련 문의드립니다.

1

314

1

17강 도입부 실습사이트 문의

2

314

1

4강 코드 오류메세지 관련 질의

1

387

2

쉬운 도서 추천 좀 부탁드립니다.

2

409

2

1강2강에 있는 csv파일을 다운받으면 한글이 깨져서 나와요

1

260

1

주피터노트북 목록(contents) 만들기

1

637

1

df.loc[df["거주지"].isin(gu), "지역"] = df["거주지"] 질문있습니다

1

215

1

월 주 함꼐 value_counts()

1

231

1

day_count.iloc[i]와 day_count[i]의 차이 질문

1

357

1

df 인덱싱 질문입니다

1

190

1

그래프에 한글제목을 나타내고 싶습니다.

1

543

1

배운 것 기반으로 만들어보고 있는데 질문이 있습니다.

1

409

5

질문이요

1

309

1

set_index()

1

296

1

timeit 관련 질문

1

370

1

그래프 밑에 제목을 넣으려면 어떡해야하나요???

1

433

2

한글폰트 설치 후 나오지 않는 현상 문의

1

1188

3

CSV 파일 불러오기

1

584

1

크롤링으로 csv파일 가져오기

2

326

1

영상에서 소개해주시는 웹사이트

2

264

1

질문

1

242

2

15강 질문

1

230

1