ホームページ  >  記事  >  バックエンド開発  >  日付範囲の条件付き結合を使用して Pandas DataFrame を効率的にマージする方法

日付範囲の条件付き結合を使用して Pandas DataFrame を効率的にマージする方法

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-10-31 07:33:30181ブラウズ

How to Efficiently Merge Pandas DataFrames with a Conditioned Join on Date Range?

日付範囲の条件付き結合を使用して Pandas データフレームをマージします

識別子に基づいて 2 つのデータフレーム A と B をマージする必要があります (" cusip") と、データフレーム A ("fdate") の日付がデータフレーム B ("namedt" と "nameenddt") の 2 つの日付の間にあるという条件です。

このタスクの SQL の容易さは認識していますが、無条件マージとそれに続くフィルタリングを含むパンダのアプローチに行き詰まっており、非効率的になる可能性があります。このアプローチが次善である理由は次のとおりです。

df = pd.merge(A, B, how='inner', left_on='cusip', right_on='ncusip')
df = df[(df['fdate']>=df['namedt']) & (df['fdate']<=df['nameenddt'])]

フィルター処理の前に大規模な暫定データフレームを作成する代わりに、マージ操作自体にフィルター処理を組み込むソリューションを模索します。

探索代替アプローチ

このようなシナリオでは、SQLite などのデータベースの利用を検討してください。 Pandas の to_sql メソッドを使用すると、データフレームをデータベースに簡単に書き込むことができます。その後、SQL クエリにより効率的なフィルタリングとマージ操作が可能になります。

架空のデータフレームとデータベース接続を使用した例を次に示します:

import pandas as pd
import sqlite3

# Sample dataframes
presidents = pd.DataFrame({"name": ["Bush", "Obama", "Trump"], "president_id": [43, 44, 45]})
terms = pd.DataFrame({"start_date": pd.date_range('2001-01-20', periods=5, freq='48M'), "end_date": pd.date_range('2005-01-21', periods=5, freq='48M'), "president_id": [43, 43, 44, 44, 45]})
war_declarations = pd.DataFrame({"date": [datetime(2001, 9, 14), datetime(2003, 3, 3)], "name": ["War in Afghanistan", "Iraq War"]})

# Database connection
conn = sqlite3.connect(':memory:')

# Write dataframes to database
terms.to_sql('terms', conn, index=False)
presidents.to_sql('presidents', conn, index=False)
war_declarations.to_sql('wars', conn, index=False)

# SQL query
qry = '''
    SELECT
        start_date AS PresTermStart,
        end_date AS PresTermEnd,
        wars.date AS WarStart,
        presidents.name AS Pres
    FROM
        terms
    JOIN
        wars ON date BETWEEN start_date AND end_date
    JOIN
        presidents ON terms.president_id = presidents.president_id
'''

# Read query results into pandas dataframe
df = pd.read_sql_query(qry, conn)

このアプローチにより、不必要に大規模なデータ フレームを作成せずに結合とフィルタリングを行うことができます。中間データフレーム。

以上が日付範囲の条件付き結合を使用して Pandas DataFrame を効率的にマージする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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