ホームページ >バックエンド開発 >Python チュートリアル >Pandas でデカルト積 (CROSS JOIN) を効率的に実行するにはどうすればよいですか?

Pandas でデカルト積 (CROSS JOIN) を効率的に実行するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-09 04:07:13786ブラウズ

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。 Multi-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。 2 つの DataFrame の単純化された CROSS JOIN:

このメソッドは、@senderle の cartesian_product とほぼ同じ速度で、2 つの 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 でデカルト積 (CROSS JOIN) を効率的に実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。