> 백엔드 개발 > 파이썬 튜토리얼 > Pandas에서 어떻게 Cartesian Product(CROSS JOIN)를 효율적으로 수행할 수 있나요?

Pandas에서 어떻게 Cartesian Product(CROSS JOIN)를 효율적으로 수행할 수 있나요?

Susan Sarandon
풀어 주다: 2024-12-09 04:07:13
원래의
775명이 탐색했습니다.

How Can I Efficiently Perform a Cartesian Product (CROSS JOIN) in Pandas?

Pandas의 효율적인 데카르트 곱(CROSS JOIN)

소개:

데카르트 곱, CROSS JOIN이라고도 하는 데이터의 기본 작업입니다. 분석. 팬더에서는 한 DataFrame의 모든 행을 다른 DataFrame의 모든 행과 결합하는 작업이 포함됩니다. 이해하기 쉽지만 데카르트 곱을 직접 계산하는 것은 특히 대규모 데이터 세트의 경우 계산 비용이 많이 들 수 있습니다.

모범 사례:

1. '키' 열 방법:

이 접근 방식은 중소 규모 데이터세트에 적합합니다.

def cartesian_product_key(left, right):
    return left.assign(key=1).merge(right.assign(key=1), on='key').drop('key', 1)
로그인 후 복사

2. 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)  
로그인 후 복사

3. 고유 및 비고유 인덱스에 대한 일반화된 CROSS JOIN:

이 방법은 모든 유형의 인덱스를 사용하여 DataFrame을 처리할 수 있습니다:

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]]]))
로그인 후 복사

4. 다중 DataFrame CROSS JOIN:

이는 여러 DataFrame을 처리하기 위한 이전 접근 방식을 확장합니다:

def cartesian_product_multi(*dfs):
    idx = cartesian_product(*[np.ogrid[:len(df)] for df in dfs])
    return pd.DataFrame(
        np.column_stack([df.values[idx[:,i]] for i,df in enumerate(dfs)]))
로그인 후 복사

5. 두 DataFrame에 대한 단순화된 CROSS JOIN:

@senderle의 cartesian_product만큼 빠른 이 방법은 특히 두 DataFrame에 효과적입니다.

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는 데이터세트의 크기와 특성에 따라 달라집니다. 성능이 최우선이라면 NumPy 기반 솔루션 중 하나를 선택하세요. 편의성과 유연성을 위해 '키' 열 방식이나 일반화된 CROSS JOIN을 고려하세요.

위 내용은 Pandas에서 어떻게 Cartesian Product(CROSS JOIN)를 효율적으로 수행할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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