programing

인덱스로 두 데이터 프레임 병합

shortcode 2022. 11. 24. 21:16
반응형

인덱스로 두 데이터 프레임 병합

다음과 같은 데이터 프레임이 있습니다.

> df1
  id begin conditional confidence discoveryTechnique  
0 278    56       false        0.0                  1   
1 421    18       false        0.0                  1 

> df2
   concept 
0  A  
1  B
   

인덱스에서 병합하여 다음 정보를 얻으려면 어떻게 해야 합니까?

  id begin conditional confidence discoveryTechnique   concept 
0 278    56       false        0.0                  1  A 
1 421    18       false        0.0                  1  B

라고 알고 있기 때문에 묻습니다.merge()예.df1.merge(df2)는 열을 사용하여 매칭을 수행합니다.실제로 이렇게 하면 다음과 같은 것을 알 수 있습니다.

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.7/dist-packages/pandas/core/frame.py", line 4618, in merge
    copy=copy, indicator=indicator)
  File "/usr/local/lib/python2.7/dist-packages/pandas/tools/merge.py", line 58, in merge
    copy=copy, indicator=indicator)
  File "/usr/local/lib/python2.7/dist-packages/pandas/tools/merge.py", line 491, in __init__
    self._validate_specification()
  File "/usr/local/lib/python2.7/dist-packages/pandas/tools/merge.py", line 812, in _validate_specification
    raise MergeError('No common columns to perform merge on')
pandas.tools.merge.MergeError: No common columns to perform merge on

인덱스에서 병합하는 것이 잘못된 관행입니까?불가능 한 건가요?이 경우 인덱스를 "index"라는 새 열로 이동하려면 어떻게 해야 합니까?

를 사용합니다.이것은 디폴트로는 내부 결합입니다.

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

또는 디폴트로는 왼쪽 결합입니다.

df1.join(df2)

또는 ).이것은 디폴트로 외부 결합은 다음과 같습니다.

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

샘플:

df1 = pd.DataFrame({'a':range(6),
                    'b':[5,3,6,9,2,4]}, index=list('abcdef'))

print (df1)
   a  b
a  0  5
b  1  3
c  2  6
d  3  9
e  4  2
f  5  4

df2 = pd.DataFrame({'c':range(4),
                    'd':[10,20,30, 40]}, index=list('abhi'))

print (df2)
   c   d
a  0  10
b  1  20
h  2  30
i  3  40

# Default inner join
df3 = pd.merge(df1, df2, left_index=True, right_index=True)
print (df3)
   a  b  c   d
a  0  5  0  10
b  1  3  1  20

# Default left join
df4 = df1.join(df2)
print (df4)
   a  b    c     d
a  0  5  0.0  10.0
b  1  3  1.0  20.0
c  2  6  NaN   NaN
d  3  9  NaN   NaN
e  4  2  NaN   NaN
f  5  4  NaN   NaN

# Default outer join
df5 = pd.concat([df1, df2], axis=1)
print (df5)
     a    b    c     d
a  0.0  5.0  0.0  10.0
b  1.0  3.0  1.0  20.0
c  2.0  6.0  NaN   NaN
d  3.0  9.0  NaN   NaN
e  4.0  2.0  NaN   NaN
f  5.0  4.0  NaN   NaN
h  NaN  NaN  2.0  30.0
i  NaN  NaN  3.0  40.0

인덱스로 정렬된 두 개 이상의 DF를 연결하기 위해 concat([df1, df2, ...), axis=1)를 사용할 수 있습니다.

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

또는 사용자 지정 필드/인덱스로 연결하기 위해 병합:

# join by _common_ columns: `col1`, `col3`
pd.merge(df1, df2, on=['col1','col3'])

# join by: `df1.col1 == df2.index`
pd.merge(df1, df2, left_on='col1' right_index=True)

또는 인덱스에 의한 결합:

 df1.join(df2)

디폴트:
join열 단위 왼쪽 결합입니다.
pd.merge열 단위 내부 결합입니다.
pd.concat행 단위 외부 결합입니다.

pd.concat:
참을 수 있는 주장을 받아들인다.따라서 데이터 프레임을 직접 사용할 수 없습니다(사용).[df,df2])
데이터 프레임의 치수는 축에 따라 일치해야 합니다.

Join그리고.pd.merge:
Data Frame 인수를 사용할 수 있습니다.

이 답변은 잠시 동안 해결되었으며 사용 가능한 모든 옵션이 이미 제공되고 있습니다.그러나 이 답변에서는 이러한 옵션에 대해 좀 더 자세히 설명하여 언제 무엇을 사용해야 하는지 이해하도록 하겠습니다.

이 투고에서는, 다음의 토픽에 대해 설명합니다.

  • 다른 조건에서 인덱스와 병합
    • 인덱스 기반 조인 옵션:merge,join,concat
    • 인덱스에서 병합
    • 하나의 색인, 다른 열로 병합
  • 명명된 인덱스를 효과적으로 사용하여 구문 병합 단순화


인덱스 기반 결합

TL;DR

사용 사례에 따라 다른 옵션보다 간단한 옵션이 몇 가지 있습니다.

  1. DataFrame.merge 와 함께left_index그리고.right_index(또는left_on그리고.right_on이름 있는 인덱스 사용)
  2. DataFrame.join (인덱스에 추가)
  3. pd.concat (인덱스에 추가)
장점 단점
merge

• 내부/왼쪽/오른쪽/풀 지원
• 컬럼-컬럼, 인덱스-컬럼, 인덱스-인덱스 결합 지원

• 한 번에 두 프레임만 가입할 수 있습니다.

join

• 안쪽/왼쪽(기본값)/오른쪽/풀 지원
• 한 번에 여러 데이터 프레임에 가입 가능

• 인덱스 결합만 지원

concat

• 한 번에 여러 데이터 프레임에 가입하는 것을 전문으로 합니다.
• 매우 고속(연결은 선형 시간)

• 내부/전체(기본값) 결합만 지원
• 인덱스 결합만 지원


인덱스 대 인덱스 결합

일반적으로 인덱스의 내부 결합은 다음과 같습니다.

left.merge(right, left_index=True, right_index=True)

바깥쪽)도구문을 이 구문을 사용하여 제어할 수 있습니다).how=...를 참조해 주세요.

주목할 만한 대안

  1. DataFrame.join 인덱스의 왼쪽 외부 결합이 기본값입니다.

     left.join(right, how='inner',)
    

    라도 ★★★★★★★★★★★★★★★★★★★★★★★.ValueError: columns overlap but no suffix specified을.lsuffix ★★★★★★★★★★★★★★★★★」rsuffix=이 문제를 해결하기 위해 인수를 사용합니다.열 이름이 같기 때문에 구별되는 접미사가 필요합니다.

  2. pd.concat 인덱스에 가입하여 동시에 두 개 이상의 데이터 프레임을 가입할 수 있습니다.기본적으로는 전체 외부 결합을 수행합니다.

     pd.concat([left, right], axis=1, sort=False)
    

    것은, 「」를 참조해 주세요.concat, 투고를 참조해 주세요.


인덱스와 열의 결합

하려면 , 「 」, 「 」를 합니다.DataFrame.merge의 a의 left_index=True ★★★★★★★★★★★★★★★★★」right_on=....

left.merge(right, left_index=True, right_on='key')

다른 결합도 유사한 구조를 따릅니다.주의: merge는 인덱스 투 컬럼 조인을 수행할 수 있습니다.왼쪽의 인덱스 수준 수가 오른쪽의 열 수와 같을 경우 여러 수준/열에서 결합할 수 있습니다.

join ★★★★★★★★★★★★★★★★★」concat는 혼합 병합할 수 없습니다.를 사용하여 인덱스를 사전 단계로 설정해야 합니다.


이 게시물은 Panda Merge 101에서의 내 작업의 요약본이다.병합에 대한 더 많은 예시와 다른 주제를 보려면 이 링크를 클릭하십시오.

같은 "Dex"가 원인이 되어 했습니다.dtypes. 테이블이기 않습니다.두 테이블이 동일한 원래 테이블의 피벗 테이블이었기 때문에 이는 명확하지 않습니다.★★★ reset_index주피터에서는 지수가 동일해 보였다.Excel에 저장했을 때만 알 수 있었습니다...

df1[['key']] = df1[['key']].apply(pd.to_numeric)

이걸로 누군가 한 시간을 절약할 수 있길 바라!

개의 Panda와 같은 사용 가능한 할 수 .merge ★★★★★★★★★★★★★★★★★」concatenate.

를 들어 2개의 데이터 이 있는 의 데이터 프레임이 있습니다.df1 ★★★★★★★★★★★★★★★★★」df2하다

newdataframe = merge(df1, df2, left_index=True, right_index=True)

몇을 할 수없이 수 있습니다.dataframe.

  1. merge)(「참가」).

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

  2. join)('왼쪽 결합')

    df = df1.join(df2)

  3. concat)(「참가」).

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

언급URL : https://stackoverflow.com/questions/40468069/merge-two-dataframes-by-index

반응형