Pandas DataFrame を日付範囲条件で効率的にマージするにはどうすればよいですか?

Barbara Streisand
リリース: 2024-11-02 13:49:02
オリジナル
952 人が閲覧しました

How to Efficiently Merge Pandas DataFrames with Date Range Conditions?

日付範囲条件を使用した Pandas データフレームのマージ

1 つの値が他の 2 つの値の間にある 2 つの pandas データフレームをマージするには、一般的なアプローチとして、データフレームを識別子に基づいて無条件に抽出し、その後、日付条件に基づいてフィルタリングします。ただし、この方法ではメモリ効率が低下する可能性があります。

SQL の機能を利用する代替ソリューションは、次に示すように、SQL クエリ内でマージとフィルタリングを実行することです。

<code class="python">import pandas as pd
import sqlite3

# Create 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"]})

# Create an in-memory database
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)

# Execute SQL query to merge and filter dataframes
qry = '''
    select  
        start_date PresTermStart,
        end_date PresTermEnd,
        wars.date WarStart,
        presidents.name Pres
    from
        terms join wars on
        date between start_date and end_date join presidents on
        terms.president_id = presidents.president_id
    '''
df = pd.read_sql_query(qry, conn)

print(df)</code>
ログイン後にコピー

出力:

         PresTermStart          PresTermEnd             WarStart  Pres
0  2001-01-31 00:00:00  2005-01-31 00:00:00  2001-09-14 00:00:00  Bush
1  2001-01-31 00:00:00  2005-01-31 00:00:00  2003-03-03 00:00:00  Bush
ログイン後にコピー

SQL 内でマージとフィルター処理を実行することで、潜在的に大規模な中間データフレームの作成を回避でき、結果としてメモリ効率が向上します。

以上がPandas DataFrame を日付範囲条件で効率的にマージするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!