Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Mencantumkan Bingkai Data Pandas Dengan Cekap Berdasarkan Julat Nilai dan Pengecam?

Bagaimana untuk Mencantumkan Bingkai Data Pandas Dengan Cekap Berdasarkan Julat Nilai dan Pengecam?

Linda Hamilton
Linda Hamiltonasal
2024-10-30 11:54:02181semak imbas

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

Gabungkan Bingkai Data Panda Berdasarkan Julat Nilai dan Pengecam

Dalam panda, menggabungkan bingkai data menggunakan keadaan berasaskan julat dan pengecam boleh dicapai melalui gabungan operasi penggabungan dan penapisan. Walau bagaimanapun, pendekatan ini boleh menjadi tidak cekap apabila bekerja dengan set data yang besar. Pendekatan alternatif yang memanfaatkan SQL boleh memberikan prestasi yang lebih baik.

Mari kita pertimbangkan contoh di mana kita mempunyai dua bingkai data, A dan B. Bingkai data A mengandungi tarikh (fdate) dan pengecam (cusip), manakala Bingkai Data B termasuk tarikh (namedt dan nameenddt) dan pengecam yang sama (ncusip). Matlamat kami adalah untuk menggabungkan bingkai data ini di mana fdate dalam A berada dalam julat tarikh yang ditakrifkan oleh namedt dan nameenddt dalam B.

Kod Python berikut menunjukkan pendekatan panda tradisional:

<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>

Walaupun pendekatan ini berfungsi, ia melibatkan penggabungan bingkai data tanpa syarat dan kemudian menapis berdasarkan keadaan tarikh, yang boleh menjadi mahal dari segi pengiraan untuk set data yang besar.

Pendekatan alternatif ialah menggunakan pertanyaan 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>

Pendekatan ini mempunyai beberapa kelebihan:

  • Pelaksanaan yang lebih pantas: SQL dioptimumkan untuk pemprosesan data, menjadikannya lebih cekap untuk penapisan berasaskan julat.
  • Mengelakkan data perantaraan: Data yang ditapis diekstrak terus tanpa membuat bingkai data perantaraan yang besar.
  • Kesederhanaan: Pertanyaannya ringkas dan mudah difahami.

Kesimpulannya, memanfaatkan SQL untuk menggabungkan bingkai data berdasarkan keadaan dan pengecam berasaskan julat menawarkan faedah prestasi berbanding operasi tradisional Panda, terutamanya untuk set data yang lebih besar.

Atas ialah kandungan terperinci Bagaimana untuk Mencantumkan Bingkai Data Pandas Dengan Cekap Berdasarkan Julat Nilai dan Pengecam?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn