如何有效地將 Pandas DataFrame 與日期範圍內的條件連結合併?

Mary-Kate Olsen
發布: 2024-10-31 07:33:30
原創
120 人瀏覽過

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

在日期範圍內使用條件連接合併Pandas 資料幀

您需要根據標識符合併兩個資料幀A 和B (" cusip」)以及資料幀A 中的日期(「fdate」)落在資料幀B 中的兩個日期(「namedt」和"nameenddt")。

儘管認識到此任務的 SQL 簡便性,但您仍受困於涉及無條件合併和過濾的 pandas 方法,這可能效率低下。這就是為什麼這種方法不是最理想的:

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!