> 백엔드 개발 > 파이썬 튜토리얼 > Pandas에서 CROSS JOIN을 효율적으로 수행하는 방법은 무엇입니까?

Pandas에서 CROSS JOIN을 효율적으로 수행하는 방법은 무엇입니까?

Barbara Streisand
풀어 주다: 2024-12-06 02:21:11
원래의
327명이 탐색했습니다.

How to Efficiently Perform a CROSS JOIN in Pandas?

Pandas를 사용한 교차 조인(CROSS JOIN)

이 게시물에서는 데카르트 곱(CROSS)을 수행하는 가장 효율적인 방법을 탐색합니다. JOIN) Pandas에서의 작업.

기준선 방법: 임시 키 열

일반적인 접근 방식은 두 DataFrame에 임시 키 열을 할당하고 해당 키에 대해 다대다 조인을 수행한 다음 키 열을 삭제하는 것입니다.

left = pd.DataFrame({'col1' : ['A', 'B', 'C'], 'col2' : [1, 2, 3]})
right = pd.DataFrame({'col1' : ['X', 'Y', 'Z'], 'col2' : [20, 30, 50]})

def cartesian_product_basic(left, right):
    return (
       left.assign(key=1).merge(right.assign(key=1), on='key').drop('key', 1))

cartesian_product_basic(left, right)
로그인 후 복사

NumPy 기반 구현

더 큰 규모의 성능 향상 데이터세트에서 NumPy의 데카르트 곱 구현을 활용합니다.

import numpy as np

def cartesian_product(*arrays):
    la = len(arrays)
    dtype = np.result_type(*arrays)
    arr = np.empty([len(a) for a in arrays] + [la], dtype=dtype)
    for i, a in enumerate(np.ix_(*arrays)):
        arr[...,i] = a
    return arr.reshape(-1, la)  
로그인 후 복사

고유하지 않은 인덱스 데이터프레임에 대한 일반화

이 접근 방식을 확장하여 비-고유 인덱스 데이터프레임을 처리할 수 있습니다. 고유한 인덱스:

def cartesian_product_generalized(left, right):
    la, lb = len(left), len(right)
    idx = cartesian_product(np.ogrid[:la], np.ogrid[:lb])
    return pd.DataFrame(
        np.column_stack([left.values[idx[:,0]], right.values[idx[:,1]]]))
로그인 후 복사

두 개의 DataFrame에 대한 단순화된 구현

두 개의 DataFrame만 처리할 때 np.broadcast_arrays를 활용하는 더 간단한 기술로 비슷한 성능을 얻을 수 있습니다.

def cartesian_product_simplified(left, right):
    la, lb = len(left), len(right)
    ia2, ib2 = np.broadcast_arrays(*np.ogrid[:la,:lb])

    return pd.DataFrame(
        np.column_stack([left.values[ia2.ravel()], right.values[ib2.ravel()]]))
로그인 후 복사

공연 비교

이러한 방법을 벤치마킹하면 NumPy 기반 구현이 특히 대규모 데이터 세트의 경우 가장 빠른 성능을 제공한다는 것을 알 수 있습니다.

[성능 비교 차트 이미지]

추가 자료

Pandas에 대해 더 자세히 알아보려면 병합 작업에서는 다음 주제를 살펴보세요.

  • [병합 기본 사항](https://pbpython.com/pandas-merging-101-cheat-sheet.html)
  • [색인 -기반을 둔 조인](https://pbpython.com/pandas-merging-101-join-indexes.html)
  • [여러 DataFrame으로 일반화](https://pbpython.com/pandas-merging-on- 다중 데이터프레임.html)

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

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