値の範囲と識別子に基づいて Pandas データフレームをマージする
パンダでは、範囲ベースの条件と識別子を使用してデータフレームをマージできます。マージ操作とフィルタリング操作を組み合わせて実行します。ただし、大規模なデータセットを扱う場合、このアプローチは非効率になる可能性があります。 SQL を利用する別のアプローチにより、パフォーマンスが向上する可能性があります。
2 つのデータフレーム A と B がある例を考えてみましょう。データフレーム A には日付 (fdate) と識別子 (cusip) が含まれ、データフレーム B には日付 (namedt と nameenddt) および同じ識別子 (ncusip)。私たちの目標は、A の fdate が B の namest と nameenddt で定義された日付範囲内にあるデータフレームをマージすることです。
次の Python コードは、従来の pandas アプローチを示しています。
<code class="python">df = pd.merge(A, B, how='inner', left_on='cusip', right_on='ncusip') df = df[(df['fdate']>=df['namedt']) & (df['fdate']<=df['nameenddt'])]</code>
このアプローチは機能しますが、データフレームを無条件にマージし、その後日付条件に基づいてフィルタリングする必要があるため、大規模なデータセットの場合は計算コストが高くなる可能性があります。
代替アプローチは、SQL クエリを使用することです。
<code class="python">import pandas as pd import sqlite3 # Create a temporary database in memory conn = sqlite3.connect(':memory:') # Write the dataframes to tables A.to_sql('table_a', conn, index=False) B.to_sql('table_b', conn, index=False) # Construct the SQL query query = ''' SELECT * FROM table_a JOIN table_b ON table_a.cusip = table_b.ncusip WHERE table_a.fdate BETWEEN table_b.namedt AND table_b.nameenddt ''' # Execute the query and create a Pandas dataframe df = pd.read_sql_query(query, conn)</code>
このアプローチにはいくつかの利点があります:
結論として、SQL を活用して範囲ベースの条件と識別子に基づいてデータフレームをマージすると、特に大規模なデータセットの場合、従来の Pandas 操作よりもパフォーマンス上の利点が得られます。
以上が値の範囲と識別子に基づいて Pandas データフレームを効率的にマージする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。