Pandas merge를 사용할 때 색인을 유지하는 방법
두 개를 병합 DataFrames
하고 첫 번째 프레임의 인덱스를 병합 된 데이터 세트의 인덱스로 유지하고 싶습니다 . 그러나 병합을 수행하면 결과 DataFrame에 정수 인덱스가 있습니다. 왼쪽 데이터 프레임에서 인덱스를 유지하도록 지정하려면 어떻게해야합니까?
In [4]: a = pd.DataFrame({'col1': {'a': 1, 'b': 2, 'c': 3},
'to_merge_on': {'a': 1, 'b': 3, 'c': 4}})
In [5]: b = pd.DataFrame({'col2': {0: 1, 1: 2, 2: 3},
'to_merge_on': {0: 1, 1: 3, 2: 5}})
In [6]: a
Out[6]:
col1 to_merge_on
a 1 1
b 2 3
c 3 4
In [7]: b
Out[7]:
col2 to_merge_on
0 1 1
1 2 3
2 3 5
In [8]: a.merge(b, how='left')
Out[8]:
col1 to_merge_on col2
0 1 1 1.0
1 2 3 2.0
2 3 4 NaN
In [9]: _.index
Out[9]: Int64Index([0, 1, 2], dtype='int64')
편집 : 쉽게 재현 할 수있는 예제 코드로 전환
In [5]: a.reset_index().merge(b, how="left").set_index('index')
Out[5]:
col1 to_merge_on col2
index
a 1 1 1
b 2 3 2
c 3 4 NaN
참고 : 사이에 여러 개의 일치가있는 경우 일부 왼쪽 병합 작업에 더 많은 행을 끝낼 수 a
및 b
당신은 중복 제거 (필요 중복 제거에 대한 문서가 ). 이것이 팬더가 색인을 유지하지 않는 이유입니다.
비 pd.merge 솔루션이 있습니다. map
및 사용set_index
In [1744]: a.assign(col2=a['to_merge_on'].map(b.set_index('to_merge_on')['col2']))
Out[1744]:
col1 to_merge_on col2
a 1 1 1.0
b 2 3 2.0
c 3 4 NaN
그리고 index
인덱스에 대한 더미 이름을 소개하지 않습니다 .
df1 = df1.merge(
df2, how="inner", left_index=True, right_index=True
)
이를 통해 df1의 색인을 보존 할 수 있습니다.
You can make a copy of index on left dataframe and do merge.
a['copy_index'] = a.index
a.merge(b, how='left')
I found this simple method very useful while working with large dataframe and using pd.merge_asof()
(or dd.merge_asof()
).
Merging two dataframes with index is efficient and resetting index is expensive in large dataframe setting.
참고URL : https://stackoverflow.com/questions/11976503/how-to-keep-index-when-using-pandas-merge
'program story' 카테고리의 다른 글
대부분의 최신 시스템에서 스택 성장 방향은 무엇입니까? (0) | 2020.08.19 |
---|---|
Excel OleDb를 사용하여 시트 순서로 시트 이름 가져 오기 (0) | 2020.08.18 |
정규식에서 단어 경계는 무엇입니까? (0) | 2020.08.18 |
가비지 수집기는 여기서 무한 루프를 어떻게 피합니까? (0) | 2020.08.18 |
인터페이스 상수의 장단점 (0) | 2020.08.18 |