首頁  >  文章  >  後端開發  >  如何根據值範圍和標識符有效合併 Pandas Dataframe?

如何根據值範圍和標識符有效合併 Pandas Dataframe?

Linda Hamilton
Linda Hamilton原創
2024-10-30 11:54:02185瀏覽

How to Efficiently Merge Pandas Dataframes Based on Value Range and Identifier?

基於值範圍和標識符合併Pandas 資料幀

在pandas 中,可以使用基於範圍的條件和標識符來實現合併資料幀透過合併和過濾操作的組合。然而,在處理大型資料集時,這種方法可能效率低。利用 SQL 的另一種方法可以提供更好的效能。

讓我們考慮一個範例,其中我們有兩個資料幀 A 和 B。資料幀 A 包含日期 (fdate) 和識別碼 (cusip),而資料幀 B 包含日期(namedt 和 nameenddt)和相同的識別碼 (ncusip)。我們的目標是合併這些資料幀,其中 A 中的 fdate 落在 B 中的 namet 和 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 針對資料處理進行了最佳化,使其對於基於範圍的過濾更加高效。
  • 避免中間數據:直接提取過濾後的數據,無需建立大型中間數據框。
  • 簡單性:查詢簡潔,易於理解。

總之,使用 SQL 根據基於範圍的條件和標識符合併資料幀比傳統的 Pandas 操作具有效能優勢,特別是對於較大的資料集。

以上是如何根據值範圍和標識符有效合併 Pandas Dataframe?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn