수색…


통사론

  • DataFrame. ( '_ x', '_y'), copy = True, merge ( right, how = 'inner', on = 없음, left_on = 없음, right_on = 없음, left_index = 거짓, right_index = 거짓, 표시기 = 거짓 )

  • 열 또는 인덱스별로 데이터베이스 스타일의 조인 작업을 수행하여 DataFrame 개체를 병합합니다.

  • 열의 열을 조인하면 DataFrame 인덱스가 무시됩니다. 그렇지 않으면 열 또는 열의 색인이나 색인에 색인을 결합하면 색인이 전달됩니다.

매개 변수

매개 변수 설명
권리 DataFrame
방법 { '왼쪽', '오른쪽', '외부', '내부'}, 기본 '내부'
left_on 레이블 또는 목록 또는 배열과 유사합니다. 왼쪽 DataFrame에서 조인 할 필드 이름입니다. 특정 벡터를 열 대신 조인 키로 사용하는 DataFrame 길이의 벡터 또는 벡터 목록이 될 수 있습니다.
right_on 레이블 또는 목록 또는 배열과 유사합니다. 오른쪽 DataFrame 또는 left_on 문서 당 벡터 목록에 가입 할 필드 이름
left_index 부울 값, 기본값은 False입니다. 왼쪽 DataFrame의 인덱스를 조인 키로 사용하십시오. 다중 인덱스 인 경우 다른 DataFrame의 키 수 (인덱스 또는 열 수)가 레벨 수와 일치해야합니다
right_index 부울 값, 기본값은 False입니다. 오른쪽 DataFrame의 인덱스를 조인 키로 사용하십시오. left_index와 동일한주의 사항
종류 부울, 기본 Fals. 결과 DataFrame에서 조인 키를 사 전적으로 정렬하십시오.
접미사 2 길이 시퀀스 (튜플,리스트, ...). 왼쪽과 오른쪽에 겹치는 열 이름에 적용 할 접미어
부울, 기본값은 True입니다. 거짓이면 데이터를 불필요하게 복사하지 않습니다.
지시자 부울 또는 문자열, 기본값은 False입니다. True이면 각 행의 소스에 대한 정보와 함께 "_merge"라는 DataFrame을 출력하는 열을 추가합니다. 문자열 인 경우 각 행의 소스에 대한 정보가있는 열이 DataFrame을 출력하기 위해 추가되며 열의 이름은 string입니다. 정보 열은 범주 형이며 병합 키가 '왼쪽'DataFrame에만 나타나는 관측치에 대해서는 'left_only'값을 취하고, '오른쪽'DataFrame에 병합 키만 나타나는 관측치에 대해서는 'right_only'를 취합니다. 관측 병합 키는 두 가지 모두에서 발견됩니다.

병합

예를 들어, 두 개의 테이블이 주어지며,

T1

id    x        y
8    42        1.9
9    30        1.9

T2

id    signal
8    55
8    56    
8    59
9    57
9    58    
9    60

목표는 새 테이블을 얻는 것입니다. T3 :

id    x        y        s1        s2        s3
8    42        1.9        55        56        58
9    30        1.9        57        58        60

각 열에 대응하는 열 s1 , s2s3 을 작성하는 것입니다 ( id 당 행 수는 항상 고정되어 3입니다)

join (선택 사항 인 인수를 취함)은 전달 된 DataFrame이 DataFrame의 해당 열에 정렬되도록 지정하는 열 또는 여러 열 이름 일 수 있습니다. 그래서 해결책은 아래와 같습니다 :

unstack (). reset_index ()) df = df1.merge (df2.groupby ( 'id') [ 'signal'] 적용됩니다 (lambda x : x.reset_index (drop = True)).

df
Out[63]: 
   id   x    y   0   1   2
0   8  42  1.9  55  56  59
1   9  30  1.9  57  58  60

내가 그들을 분리하면 :

df2t = df2.groupby('id')['signal'].apply(lambda x: x.reset_index(drop=True)).unstack().reset_index()

df2t
Out[59]: 
   id   0   1   2
0   8  55  56  59
1   9  57  58  60

df = df1.merge(df2t)

df
Out[61]: 
   id   x    y   0   1   2
0   8  42  1.9  55  56  59
1   9  30  1.9  57  58  60

두 개의 DataFrames 병합

In [1]: df1 = pd.DataFrame({'x': [1, 2, 3], 'y': ['a', 'b', 'c']})

In [2]: df2 = pd.DataFrame({'y': ['b', 'c', 'd'], 'z': [4, 5, 6]})

In [3]: df1
Out[3]: 
   x  y
0  1  a
1  2  b
2  3  c   

In [4]: df2
Out[4]: 
   y  z
0  b  4
1  c  5
2  d  6

내부 조인 :

두 개의 DataFrames에서 키의 교차를 사용합니다.

In [5]: df1.merge(df2) # by default, it does an inner join on the common column(s)
Out[5]: 
   x  y  z
0  2  b  4
1  3  c  5

또는 두 개의 데이터 프레임에서 키의 교차를 지정하십시오.

In [5]: merged_inner = pd.merge(left=df1, right=df2, left_on='y', right_on='y')
Out[5]: 
   x  y  z
0  2  b  4
1  3  c  5

외부 조인 :

두 개의 DataFrames에서 키 조합을 사용합니다.

In [6]: df1.merge(df2, how='outer')
Out[6]: 
     x  y    z
0  1.0  a  NaN
1  2.0  b  4.0
2  3.0  c  5.0
3  NaN  d  6.0

왼쪽 가입 :

왼쪽 DataFrame의 키만 사용합니다.

In [7]: df1.merge(df2, how='left')
Out[7]: 
   x  y    z
0  1  a  NaN
1  2  b  4.0
2  3  c  5.0

오른쪽 가입

올바른 DataFrame의 키만 사용합니다.

In [8]: df1.merge(df2, how='right')
Out[8]: 
     x  y  z
0  2.0  b  4
1  3.0  c  5
2  NaN  d  6

여러 데이터 프레임 병합 / 연결 / 결합 (가로 및 세로)

샘플 데이터 프레임 생성 :

In [57]: df3 = pd.DataFrame({'col1':[211,212,213], 'col2': [221,222,223]})

In [58]: df1 = pd.DataFrame({'col1':[11,12,13], 'col2': [21,22,23]})

In [59]: df2 = pd.DataFrame({'col1':[111,112,113], 'col2': [121,122,123]})

In [60]: df3 = pd.DataFrame({'col1':[211,212,213], 'col2': [221,222,223]})

In [61]: df1
Out[61]:
   col1  col2
0    11    21
1    12    22
2    13    23

In [62]: df2
Out[62]:
   col1  col2
0   111   121
1   112   122
2   113   123

In [63]: df3
Out[63]:
   col1  col2
0   211   221
1   212   222
2   213   223

데이터 프레임 [df1, df2, df3] 병합 / 결합 / 결합 - 세로줄 추가 - 행 추가

In [64]: pd.concat([df1,df2,df3], ignore_index=True)
Out[64]:
   col1  col2
0    11    21
1    12    22
2    13    23
3   111   121
4   112   122
5   113   123
6   211   221
7   212   222
8   213   223

데이터 프레임을 수평으로 병합 / 조인 / 연결합니다 (인덱스별로 정렬).

In [65]: pd.concat([df1,df2,df3], axis=1)
Out[65]:
   col1  col2  col1  col2  col1  col2
0    11    21   111   121   211   221
1    12    22   112   122   212   222
2    13    23   113   123   213   223

병합, 결합 및 결합

키 이름 병합은 ​​동일합니다.

pd.merge(df1, df2, on='key')

키 이름 병합이 다릅니다.

pd.merge(df1, df2, left_on='l_key', right_on='r_key')

다양한 유형의 합류

pd.merge(df1, df2, on='key', how='left')

여러 키에 병합

pd.merge(df1, df2, on=['key1', 'key2'])

겹치는 열 처리

pd.merge(df1, df2, on='key', suffixes=('_left', '_right'))

병합하는 키 대신 행 인덱스 사용

pd.merge(df1, df2, right_index=True, left_index=True)

겹쳐진 열을 제외하고는 .join 구문을 사용하지 마십시오.

왼쪽 데이터 프레임 인덱스 및 오른쪽 데이터 프레임 열에 병합

pd.merge(df1, df2, right_index=True, left_on='l_key')

연속 데이터 프레임

수직으로 붙임

pd.concat([df1, df2, df3], axis=0)

수평으로 붙임

pd.concat([df1, df2, df3], axis=1)

조인과 병합의 차이점은 무엇입니까?

leftright 데이터 프레임을 고려하십시오.

left = pd.DataFrame([['a', 1], ['b', 2]], list('XY'), list('AB'))
left

   A  B
X  a  1
Y  b  2

right = pd.DataFrame([['a', 3], ['b', 4]], list('XY'), list('AC'))
right

   A  C
X  a  3
Y  b  4

join
join 은 각각의 인덱스를 기반으로 데이터 프레임과 결합하려는 것으로 생각하십시오. 겹치는 열이 있으면 join 은 왼쪽 데이터 프레임에서 겹치는 열 이름에 접미사를 추가 join 를 원할 것입니다. 두 개의 데이터 프레임에는 겹치는 열 이름 A 있습니다.

left.join(right, lsuffix='_')

  A_  B  A  C
X  a  1  a  3
Y  b  2  b  4

색인이 보존되어 있고 우리는 4 개의 열을 가지고 있습니다. 2에서 열 left 과 2 right .

인덱스가 정렬되지 않은 경우

left.join(right.reset_index(), lsuffix='_', how='outer')

    A_    B index    A    C
0  NaN  NaN     X    a  3.0
1  NaN  NaN     Y    b  4.0
X    a  1.0   NaN  NaN  NaN
Y    b  2.0   NaN  NaN  NaN

요점을 더 잘 설명하기 위해 외부 조인을 사용했습니다. 인덱스가 정렬되지 않으면 결과는 인덱스의 합집합이됩니다.

join 에 왼쪽 데이터 프레임의 특정 열을 사용하여 조인 키로 사용할 수 있지만 여전히 오른쪽에서 인덱스를 사용합니다.

left.reset_index().join(right, on='index', lsuffix='_')

  index A_  B  A  C
0     X  a  1  a  3
1     Y  b  2  b  4

merge
merge 은 열 정렬로 생각하십시오. 기본적으로 mergemerge 할 겹치는 열을 찾습니다. merge 은 사용자가 매개 변수 on 과 함께 사용할 겹치는 열의 하위 집합을 지정하거나 병합 할 오른쪽의 왼쪽 열과 어떤 열을 지정하도록 허용하여 병합 키를보다 잘 제어 할 수 있습니다.

merge 은 인덱스가 파괴되는 결합 된 데이터 프레임을 반환합니다.

이 간단한 예제는 겹치는 열이 'A' 가되도록 찾아서 결합합니다.

left.merge(right)

   A  B  C
0  a  1  3
1  b  2  4

색인은 [0, 1] 이며 더 이상 ['X', 'Y'] 아닙니다 ['X', 'Y']

left_index 또는 right_index 매개 변수를 사용하여 인덱스에 병합하도록 명시 적으로 지정할 수 있습니다

left.merge(right, left_index=True, right_index=True, suffixes=['_', ''])

  A_  B  A  C
X  a  1  a  3
Y  b  2  b  4

그리고 위의 join 예제와 정확히 같습니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow