복붙노트

[PYTHON] Pandas는 여러 열에 외부 데이터 프레임을 여러 개 결합했습니다.

PYTHON

Pandas는 여러 열에 외부 데이터 프레임을 여러 개 결합했습니다.

필자는 DataFrame을 처음 사용하고 있으며 일련의 테이블에서 여러 개의 열에 대해 왼쪽 외부 조인을 수행하는 방법을 알고 싶습니다.

예:

df1: 
Year    Week    Colour    Val1 
2014       A       Red      50
2014       B       Red      60
2014       B     Black      70
2014       C       Red      10
2014       D     Green      20

df2:
Year    Week    Colour    Val2
2014       A     Black      30
2014       B     Black     100
2014       C     Green      50
2014       C       Red      20
2014       D       Red      40

df3:
Year    Week    Colour    Val3
2013       B       Red      60
2013       C     Black      80
2013       B     Black      10
2013       D     Green      20
2013       D       Red      50

본질적으로 나는이 SQL 코드와 같은 것을하고 싶다. (df3는 Year에 조인되지 않는다.)

SELECT df1.*, df2.Val2, df3.Val3
FROM df1
  LEFT OUTER JOIN df2
    ON df1.Year = df2.Year
    AND df1.Week = df2.Week
    AND df1.Colour = df2.Colour
  LEFT OUTER JOIN df3
    ON df1.Week = df3.Week
    AND df1.Colour = df3.Colour

결과는 다음과 같아야합니다.

Year    Week    Colour    Val1    Val2    Val3
2014       A       Red      50    Null    Null
2014       B       Red      60    Null      60
2014       B     Black      70     100    Null
2014       C       Red      10      20    Null
2014       D     Green      20    Null    Null

내가 병합을 사용하여 시도하고 가입하지만 여러 테이블에 할 때 어떻게 여러 관절이 관련되어 있는지 알아낼 수 없습니다. 누군가 제발 도와 주실 수 있습니까?

감사

해결법

  1. ==============================

    1.먼저 df1과 df2의 두 단계로 병합 한 다음 df3의 결과를 병합합니다.

    먼저 df1과 df2의 두 단계로 병합 한 다음 df3의 결과를 병합합니다.

    In [33]: s1 = pd.merge(df1, df2, how='left', on=['Year', 'Week', 'Colour'])
    

    마지막 참여를 위해 필요하지 않으므로 df3에서 1 년을 내 렸습니다.

    In [39]: df = pd.merge(s1, df3[['Week', 'Colour', 'Val3']],
                           how='left', on=['Week', 'Colour'])
    
    In [40]: df
    Out[40]: 
       Year Week Colour  Val1  Val2 Val3
    0  2014    A    Red    50   NaN  NaN
    1  2014    B    Red    60   NaN   60
    2  2014    B  Black    70   100   10
    3  2014    C    Red    10    20  NaN
    4  2014    D  Green    20   NaN   20
    
    [5 rows x 6 columns]
    
  2. ==============================

    2.@ TomAugspurger의 답을 간략하게 적어도 다음과 같이 할 수 있습니다 :

    @ TomAugspurger의 답을 간략하게 적어도 다음과 같이 할 수 있습니다 :

    df = df1.merge(df2, how='left', on=['Year', 'Week', 'Colour']).merge(df3[['Week', 'Colour', 'Val3']], how='left', on=['Week', 'Colour'])
    
  3. from https://stackoverflow.com/questions/21786490/pandas-left-outer-join-multiple-dataframes-on-multiple-columns by cc-by-sa and MIT license