Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Mencantumkan Pandas DataFrames dengan Keadaan Julat Tarikh dengan Cekap?

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

Barbara Streisand
Barbara Streisandasal
2024-11-02 13:49:02944semak imbas

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>

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

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!

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