색인을 사용할 때 중복 값이 포함 된 경우 Pandas 병합 속도가 느린 이유는 무엇입니까?

땜질하고 pd.merge()빠른 무엇에 대한 느낌을 얻으려고, 어떤 아니다. 나를 놀라게하는 일 중 하나는 병합 테이블이다 foo그리고 bar나는 값이 중복 포함되어 있는지 제공, 오히려 자신의 인덱스에 병합 한 후 그 열을 인덱스를 만들고보다 일반 OLE 열을 병합하는 경우 속도가 매우 빠르고입니다.

삽화

import numpy as np
import pandas as pd
import timeit

np.random.seed(2020)
foo = pd.DataFrame({'A': np.random.choice(10**6, size=10**6, replace=True), 'Foo': 'dummy column'})
bar = pd.DataFrame({'A': np.random.choice(10**6, size=10**6, replace=True), 'Bar': 'dummy column'})

# column <-> column
timeit.timeit(lambda: pd.merge(left=foo, right=bar, on='A', how='inner'), number=10)  # 4.275

# index <-> column
foo.set_index('A', inplace=True)
timeit.timeit(lambda: pd.merge(left=foo, right=bar, left_index=True, right_on='A', how='inner'), number=10)  # 4.329

# index <-> index
bar.set_index('A', inplace=True)
timeit.timeit(lambda: pd.merge(left=foo, right=bar, left_index=True, right_index=True, how='inner'), number=10)  # 9.863

왜 이런 일이 발생합니까?

hchw

내부적으로 두 메서드 모두 _get_join_indexerspandas.core.reshape.merge에서 호출 됩니다. 그러나 이것이 호출되는 방식에는 약간의 차이가 있습니다 ( https://github.com/pandas-dev/pandas/blob/master/pandas/core/reshape/merge.py#L844 ).

  • 당신이 모두를 제공하는 경우 left_index=Trueright_index=True, 후드 아래에 무슨 본질적으로 left_index.join(right_index). _get_join_indexers여기에서 호출됩니다

  • 당신의 모두를 제공하지 않는 경우 left_index=Trueright_index=True, _get_join_indexers더 직접적으로 호출

그래서 우리 left_index.join(right_index)가 이것을 늦추는 것을 부를 때 무슨 일이 일어나고 있습니까? 대답은 sort인덱스가 고유하지 않고 (이 예에 따라) 항상 True( https://github.com/pandas-dev/pandas/blob/v0.25.3으로 설정된 경우 인수가 실제로 완전히 전파되지 않는다는 것입니다. /pandas/core/indexes/base.py#L3689 ).

사실, 결과를 보면 실제로는 같지 않습니다! 두 인덱스를 모두 사용하면 결과가 정렬됩니다 (병합에 전달하는 인수가이지만 sort=False). sort=True모든 병합 방법을 전달 하면 런타임이 예상대로 거의 동일 해집니다.

TL, DR : sortkwarg가 올바르게 전파되지 않고 고유하지 않은 인덱스에 병합 할 때 준수되지 않습니다 (PR 수신!)

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Nautilus가 Google 드라이브에 파일을 복사하는 속도가 느린 이유는 무엇입니까?

분류에서Dev

"keyof (A | B)"가 "never"인 경우 A 또는 B의 키를 사용할 때 "과도한 속성 검사"가 행복한 이유는 무엇입니까?

분류에서Dev

중복 요소가 포함 된 경우 여러 벡터를 병합하는 방법은 무엇입니까?

분류에서Dev

CSS 변수를 도입 할 때 브라우저가 잘못된 속성 선언을 사용하려고하는 이유는 무엇입니까?

분류에서Dev

인터넷 검색 및 다운로드 속도가 매우 느린 이유는 무엇입니까?

분류에서Dev

Google 캘린더에서 singleEvents = false를 사용할 때 수정 된 반복 이벤트 인스턴스가 나열되는 이유는 무엇입니까?

분류에서Dev

가능한 경우 웹 사이트의 로컬 사본을 탐색합니다 (인터넷 연결 속도가 느린 Firefox).

분류에서Dev

상위 개체에 대용량 데이터가 포함 된 경우 느린 다중 처리

분류에서Dev

콜론이 포함 된 키가있는 중첩 된 해시를 인쇄하려고 할 때 구문 오류가 발생하는 이유는 무엇입니까?

분류에서Dev

Firebase 함수 배포가 매우 느린 이유는 무엇인가요?

분류에서Dev

중첩 된 속성을 사용할 때 배열 대신 해시를받는 이유는 무엇입니까?

분류에서Dev

mysqli 객체가 포함 된 속성을 사용할 수없는 이유는 무엇입니까?

분류에서Dev

포함 된 파일을 연결할 때 Visual Studio 오류가 발생하는 이유는 무엇입니까?

분류에서Dev

피보나치 합계를 찾을 때 내 코드가 느린 이유는 무엇입니까?

분류에서Dev

데이터 프레임에서 열 값을 병합 할 때 중복을 제거하지 않는 이유는 무엇입니까?

분류에서Dev

연결된 목록에서 정렬 된 순서로 노드를 삽입 할 때 이중 포인터를 사용하는 이유는 무엇입니까?

분류에서Dev

.module 정의에 포함 된 경우 .config에서 localStorage를 사용할 수없는 이유는 무엇입니까?

분류에서Dev

Linux 커널에 중복 코드가 포함 된 이유는 무엇입니까?

분류에서Dev

복사가 이동보다 느린 이유는 무엇입니까?

분류에서Dev

쿼리에 "IN"접두사가 포함 된 경우 탄력적 검색이 결과를 반환하지 않는 이유는 무엇입니까?

분류에서Dev

datetime으로 변환 할 때 pandas를 사용하여 결과가 잘못된 연도 및 월을 구문 분석하는 이유는 무엇입니까?

분류에서Dev

Linux가 포워딩이 비활성화 된 경우에도 다른 인터페이스 IP에서 연결을 허용하는 이유는 무엇입니까?

분류에서Dev

명명 된 유형 (IdentityUser)을 사용할 때 오류가 발생하고 var에 할당 할 때 제대로 작동합니다. 이유는 무엇입니까?

분류에서Dev

요소 유형이 혼합 된 Pandas DataFrame에서 요소를 변경할 때 "ValueError"가 발생하는 이유는 무엇입니까?

분류에서Dev

Hashtables가 별도의 체인을 사용하는 경우 중복 키가 불가능한 이유는 무엇입니까?

분류에서Dev

Unity가 "느린"데스크탑 환경 인 이유는 무엇입니까?

분류에서Dev

Unity가 "느린"데스크탑 환경 인 이유는 무엇입니까?

분류에서Dev

Pandas "apply"함수가 새로 추가 된 열에 NULL 값을 도입하는 이유는 무엇입니까?

분류에서Dev

함수에서 중첩 된 도우미 함수를 사용할 때 느린 Swift 빌드

Related 관련 기사

  1. 1

    Nautilus가 Google 드라이브에 파일을 복사하는 속도가 느린 이유는 무엇입니까?

  2. 2

    "keyof (A | B)"가 "never"인 경우 A 또는 B의 키를 사용할 때 "과도한 속성 검사"가 행복한 이유는 무엇입니까?

  3. 3

    중복 요소가 포함 된 경우 여러 벡터를 병합하는 방법은 무엇입니까?

  4. 4

    CSS 변수를 도입 할 때 브라우저가 잘못된 속성 선언을 사용하려고하는 이유는 무엇입니까?

  5. 5

    인터넷 검색 및 다운로드 속도가 매우 느린 이유는 무엇입니까?

  6. 6

    Google 캘린더에서 singleEvents = false를 사용할 때 수정 된 반복 이벤트 인스턴스가 나열되는 이유는 무엇입니까?

  7. 7

    가능한 경우 웹 사이트의 로컬 사본을 탐색합니다 (인터넷 연결 속도가 느린 Firefox).

  8. 8

    상위 개체에 대용량 데이터가 포함 된 경우 느린 다중 처리

  9. 9

    콜론이 포함 된 키가있는 중첩 된 해시를 인쇄하려고 할 때 구문 오류가 발생하는 이유는 무엇입니까?

  10. 10

    Firebase 함수 배포가 매우 느린 이유는 무엇인가요?

  11. 11

    중첩 된 속성을 사용할 때 배열 대신 해시를받는 이유는 무엇입니까?

  12. 12

    mysqli 객체가 포함 된 속성을 사용할 수없는 이유는 무엇입니까?

  13. 13

    포함 된 파일을 연결할 때 Visual Studio 오류가 발생하는 이유는 무엇입니까?

  14. 14

    피보나치 합계를 찾을 때 내 코드가 느린 이유는 무엇입니까?

  15. 15

    데이터 프레임에서 열 값을 병합 할 때 중복을 제거하지 않는 이유는 무엇입니까?

  16. 16

    연결된 목록에서 정렬 된 순서로 노드를 삽입 할 때 이중 포인터를 사용하는 이유는 무엇입니까?

  17. 17

    .module 정의에 포함 된 경우 .config에서 localStorage를 사용할 수없는 이유는 무엇입니까?

  18. 18

    Linux 커널에 중복 코드가 포함 된 이유는 무엇입니까?

  19. 19

    복사가 이동보다 느린 이유는 무엇입니까?

  20. 20

    쿼리에 "IN"접두사가 포함 된 경우 탄력적 검색이 결과를 반환하지 않는 이유는 무엇입니까?

  21. 21

    datetime으로 변환 할 때 pandas를 사용하여 결과가 잘못된 연도 및 월을 구문 분석하는 이유는 무엇입니까?

  22. 22

    Linux가 포워딩이 비활성화 된 경우에도 다른 인터페이스 IP에서 연결을 허용하는 이유는 무엇입니까?

  23. 23

    명명 된 유형 (IdentityUser)을 사용할 때 오류가 발생하고 var에 할당 할 때 제대로 작동합니다. 이유는 무엇입니까?

  24. 24

    요소 유형이 혼합 된 Pandas DataFrame에서 요소를 변경할 때 "ValueError"가 발생하는 이유는 무엇입니까?

  25. 25

    Hashtables가 별도의 체인을 사용하는 경우 중복 키가 불가능한 이유는 무엇입니까?

  26. 26

    Unity가 "느린"데스크탑 환경 인 이유는 무엇입니까?

  27. 27

    Unity가 "느린"데스크탑 환경 인 이유는 무엇입니까?

  28. 28

    Pandas "apply"함수가 새로 추가 된 열에 NULL 값을 도입하는 이유는 무엇입니까?

  29. 29

    함수에서 중첩 된 도우미 함수를 사용할 때 느린 Swift 빌드

뜨겁다태그

보관