>  기사  >  백엔드 개발  >  Pandas DataFrame을 날짜 범위 조건과 효율적으로 병합하는 방법은 무엇입니까?

Pandas DataFrame을 날짜 범위 조건과 효율적으로 병합하는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-11-02 13:49:02944검색

How to Efficiently Merge Pandas DataFrames with Date Range Conditions?

날짜 범위 조건을 사용하여 Pandas 데이터 프레임 병합

하나의 값이 다른 두 값 사이에 속하는 두 개의 Pandas 데이터 프레임을 병합하려면 일반적인 접근 방식에 무조건 식별자에 따라 데이터 프레임을 생성하고 이후 날짜 조건에 따라 필터링합니다. 그러나 이 방법은 메모리 비효율성을 초래할 수 있습니다.

SQL의 강력한 기능을 활용하는 대체 솔루션은 아래 설명된 것처럼 SQL 쿼리 내에서 병합 및 필터링을 수행하는 것입니다.

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

결과:

         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

SQL 내에서 병합 및 필터링을 수행하면 잠재적으로 큰 중간 데이터 프레임 생성을 방지하여 메모리 효율성을 향상시킬 수 있습니다.

위 내용은 Pandas DataFrame을 날짜 범위 조건과 효율적으로 병합하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.