강의

멘토링

커뮤니티

Inflearn Community Q&A

vampard0314's profile image
vampard0314

asked

Mastering data analysis and visualization with just two pages of documentation

14) Merging dataframes with merge using left, right, inner, and outer options

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

Written on

·

488

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은 널값을 포함한 채로 그룹바이가 가능한걸로 알고 있어서 문의드립니다.

pythonpandas

Answer 3

0

vampard0314님의 프로필 이미지
vampard0314
Questioner

예를 들어 설명을 드리면

 

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

 

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

todaycode님의 프로필 이미지
todaycode
Instructor

안녕하세요.

아쉽게도 판다스는 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

vampard0314님의 프로필 이미지
vampard0314
Questioner

감사합니다. 강사님,

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

 

todaycode님의 프로필 이미지
todaycode
Instructor

안녕하세요.

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

0

todaycode님의 프로필 이미지
todaycode
Instructor

안녕하세요.

 

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)

 

vampard0314's profile image
vampard0314

asked

Ask a question