Numpy Broadcasting을 사용하여 Pandas에서 범위 조건에 따라 DataFrame을 병합하는 방법은 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-10-31 09:33:01
원래의
299명이 탐색했습니다.

How to Merge DataFrames by Range Condition in Pandas Using Numpy Broadcasting?

Pandas에서 범위 조건에 따라 데이터 프레임 병합

데이터 분석 영역 내에서 여러 소스의 데이터를 결합하는 것은 일반적인 작업입니다. 데이터 조작을 위한 강력한 Python 라이브러리인 Pandas는 범위 조건을 포함하여 데이터프레임을 병합하기 위한 다양한 방법을 제공합니다. 이 기사에서는 이 특정 시나리오를 자세히 살펴보고 numpy 브로드캐스팅을 사용하는 효율적인 솔루션을 제시합니다.

문제 설명

두 개의 데이터 프레임 A와 B가 주어지면 목표는 다음을 수행하는 것입니다. 데이터 프레임 A의 값이 데이터 프레임 B에 정의된 특정 범위 내에 속하는 내부 조인. 전통적으로 이는 SQL 구문을 사용하여 달성됩니다:

<code class="sql">SELECT *
FROM A, B
WHERE A_value BETWEEN B_low AND B_high</code>
로그인 후 복사

기존 솔루션

Pandas는 더미 열을 사용하여 더미 열을 병합한 다음 불필요한 행을 필터링하는 해결 방법을 제공합니다. 그러나 이 방법은 계산량이 많습니다. 또는 B의 각 A 값에 대해 검색 기능을 적용할 수도 있지만 이 접근 방식에도 단점이 있습니다.

Numpy Broadcasting: A Pragmatic Approach

Numpy Broadcasting은 우아하고 효율적인 솔루션. 이 기술은 벡터화를 활용하여 개별 요소가 아닌 전체 배열에 대한 계산을 수행합니다. 원하는 병합을 달성하려면:

  1. 데이터 프레임 A와 B에서 값을 추출합니다.
  2. numpy 브로드캐스팅을 사용하여 부울 마스크를 만듭니다.

    • A_value >= B_low
    • A_value <= B_high
  3. numpy의 np.where를 사용하여 마스크가 True인 인덱스를 찾습니다.
  4. 연결 식별된 인덱스를 기반으로 데이터 프레임 A와 B의 해당 행.

이 접근 방식은 브로드캐스팅을 활용하여 전체 A 데이터 프레임에 대한 범위 비교를 수행하므로 계산 시간과 복잡성이 크게 줄어듭니다.

다음 데이터프레임을 고려하세요.

<code class="python">A = pd.DataFrame(dict(
    A_id=range(10),
    A_value=range(5, 105, 10)
))
B = pd.DataFrame(dict(
    B_id=range(5),
    B_low=[0, 30, 30, 46, 84],
    B_high=[10, 40, 50, 54, 84]
))</code>
로그인 후 복사

출력:

   A_id  A_value  B_high  B_id  B_low
0     0        5      10     0      0
1     3       35      40     1     30
2     3       35      50     2     30
3     4       45      50     2     30
로그인 후 복사

이 출력은 성공적인 데이터 프레임을 보여줍니다. 지정된 범위 조건을 기반으로 데이터 프레임 A와 B를 병합합니다.

추가 고려 사항

왼쪽 조인을 수행하려면 데이터 프레임 A의 일치하지 않는 행을 출력에 포함합니다. 이는 numpy의 ~np.in1d를 사용하여 일치하지 않는 행을 식별하고 이를 결과에 추가함으로써 달성할 수 있습니다.

결론적으로 numpy 브로드캐스팅은 범위 조건에 따라 데이터 프레임을 병합하기 위한 강력하고 효율적인 접근 방식을 제공합니다. 벡터화 기능은 성능을 향상시켜 대규모 데이터세트에 이상적인 솔루션입니다.

위 내용은 Numpy Broadcasting을 사용하여 Pandas에서 범위 조건에 따라 DataFrame을 병합하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿