>  기사  >  백엔드 개발  >  Pandas에서 범위 기반 조인을 효율적으로 수행하는 방법은 무엇입니까?

Pandas에서 범위 기반 조인을 효율적으로 수행하는 방법은 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-11-02 00:19:02646검색

How to Efficiently Perform Range-Based Joins in Pandas?

Pandas에서 범위 기반 조인 최적화

데이터 프레임으로 작업할 때 범위 조건에 따라 조인을 수행해야 하는 경우가 많습니다. Pandas의 일반적인 접근 방식은 더미 열을 만들고 여기에 조인하고 불필요한 행을 필터링하는 것입니다. 그러나 이 솔루션은 특히 대규모 데이터세트의 경우 계산 비용이 많이 들 수 있습니다.

다행히도 Pandas에는 범위 기반 조인을 달성하는 더 효율적이고 우아한 방법이 있습니다.

numpy 브로드캐스팅 사용

가장 간단한 방법은 numpy 브로드캐스팅을 활용하는 것입니다. 여기에는 Pandas 데이터프레임을 numpy 배열로 변환하고 부울 연산을 사용하여 일치하는 행을 식별하는 작업이 포함됩니다.

<code class="python">import numpy as np

a = A.A_value.values
bh = B.B_high.values
bl = B.B_low.values

i, j = np.where((a[:, None] >= bl) & (a[:, None] <= bh))

pd.concat([
    A.loc[i, :].reset_index(drop=True),
    B.loc[j, :].reset_index(drop=True)
], axis=1)</code>

이 접근 방식은 비용이 많이 드는 행 반복을 방지하므로 매우 효율적입니다.

왼쪽으로 확장 조인

이 솔루션을 왼쪽 조인으로 확장하기 위해 데이터 프레임 B의 어떤 행과도 일치하지 않는 데이터 프레임 A의 나머지 행을 추가할 수 있습니다.

<code class="python">pd.concat([
    A.loc[i, :].reset_index(drop=True),
    B.loc[j, :].reset_index(drop=True)
], axis=1).append(
    A[~np.in1d(np.arange(len(A)), np.unique(i))],
    ignore_index=True, sort=False
)</code>

이렇게 하면 모든 데이터 프레임 A의 행은 데이터 프레임 B에 일치하는 행이 없더라도 결과에 포함됩니다.

위 내용은 Pandas에서 범위 기반 조인을 효율적으로 수행하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.