인덱스로 두 데이터 프레임 병합
다음과 같은 데이터 프레임이 있습니다.
> 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
사용 사례에 따라 다른 옵션보다 간단한 옵션이 몇 가지 있습니다.
DataFrame.merge
와 함께left_index
그리고.right_index
(또는left_on
그리고.right_on
이름 있는 인덱스 사용)DataFrame.join
(인덱스에 추가)pd.concat
(인덱스에 추가)
장점 | 단점 | |
---|---|---|
merge |
• 내부/왼쪽/오른쪽/풀 지원 |
• 한 번에 두 프레임만 가입할 수 있습니다. |
join |
• 안쪽/왼쪽(기본값)/오른쪽/풀 지원 |
• 인덱스 결합만 지원 |
concat |
• 한 번에 여러 데이터 프레임에 가입하는 것을 전문으로 합니다. |
• 내부/전체(기본값) 결합만 지원 |
인덱스 대 인덱스 결합
일반적으로 인덱스의 내부 결합은 다음과 같습니다.
left.merge(right, left_index=True, right_index=True)
바깥쪽)도구문을 이 구문을 사용하여 제어할 수 있습니다).how=...
를 참조해 주세요.
주목할 만한 대안
DataFrame.join
인덱스의 왼쪽 외부 결합이 기본값입니다.left.join(right, how='inner',)
라도 ★★★★★★★★★★★★★★★★★★★★★★★.
ValueError: columns overlap but no suffix specified
을.lsuffix
★★★★★★★★★★★★★★★★★」rsuffix=
이 문제를 해결하기 위해 인수를 사용합니다.열 이름이 같기 때문에 구별되는 접미사가 필요합니다.pd.concat
인덱스에 가입하여 동시에 두 개 이상의 데이터 프레임을 가입할 수 있습니다.기본적으로는 전체 외부 결합을 수행합니다.pd.concat([left, right], axis=1, sort=False)
인덱스와 열의 결합
하려면 , 「 」, 「 」를 합니다.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
.
merge
)(「참가」).df = pd.merge(df1, df2, left_index=True, right_index=True)
join
)('왼쪽 결합')df = df1.join(df2)
concat
)(「참가」).df = pd.concat([df1, df2], axis=1)
언급URL : https://stackoverflow.com/questions/40468069/merge-two-dataframes-by-index
'programing' 카테고리의 다른 글
JavaScript에서 setAttribute vs .timeout=을 사용해야 하는 시기는 언제입니까? (0) | 2022.12.24 |
---|---|
Python / NumPy에서 메시 그리드의 목적은 무엇입니까? (0) | 2022.11.24 |
프로세스가 실행되는 동안 하위 프로세스 출력을 지속적으로 인쇄합니다. (0) | 2022.11.24 |
JDBC에서 접속 풀을 확립하려면 어떻게 해야 합니까? (0) | 2022.11.24 |
Django가 있는 AngularJS - 템플릿 태그가 충돌합니다. (0) | 2022.11.24 |