Bagaimana untuk Mencantumkan Pandas DataFrames dengan Keadaan Julat Tarikh dengan Cekap?

Barbara Streisand
Lepaskan: 2024-11-02 13:49:02
asal
952 orang telah melayarinya

How to Efficiently Merge Pandas DataFrames with Date Range Conditions?

Menggabungkan Bingkai Data Panda dengan Syarat Julat Tarikh

Untuk menggabungkan dua bingkai data panda di mana satu nilai jatuh antara dua yang lain, pendekatan biasa melibatkan penggabungan bingkai data tanpa syarat pada pengecam dan kemudiannya menapis berdasarkan keadaan tarikh. Walau bagaimanapun, kaedah ini boleh membawa kepada ketidakcekapan ingatan.

Penyelesaian alternatif yang memanfaatkan kuasa SQL adalah dengan melaksanakan gabungan dan penapisan dalam pertanyaan SQL, seperti yang ditunjukkan di bawah:

<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>
Salin selepas log masuk

Output:

         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
Salin selepas log masuk

Dengan melakukan gabungan dan penapisan dalam SQL, kami boleh mengelak daripada mencipta kerangka data perantaraan yang berpotensi besar, menghasilkan kecekapan memori yang dipertingkatkan.

Atas ialah kandungan terperinci Bagaimana untuk Mencantumkan Pandas DataFrames dengan Keadaan Julat Tarikh dengan Cekap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!