날짜 범위에 대한 조건부 조인을 사용하여 Pandas DataFrame을 효율적으로 병합하는 방법은 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-10-31 07:33:30
원래의
177명이 탐색했습니다.

How to Efficiently Merge Pandas DataFrames with a Conditioned Join on Date Range?

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

식별자(" cusip") 및 데이터 프레임 A의 날짜("fdate")가 데이터 프레임 B의 두 날짜("namedt" 및 "nameenddt") 사이에 속하는 조건입니다.

이 작업의 SQL 용이성을 인식하더라도 무조건 병합과 필터링이 뒤따르는 판다 접근 방식에 갇혀 있는데, 이는 비효율적일 수 있습니다. 이 접근 방식이 차선책인 이유는 다음과 같습니다.

df = pd.merge(A, B, how='inner', left_on='cusip', right_on='ncusip')
df = df[(df['fdate']>=df['namedt']) & (df['fdate']<=df['nameenddt'])]
로그인 후 복사

필터링 전에 대규모 임시 데이터 프레임을 생성하는 대신 병합 작업 자체 내에 필터링을 통합하는 솔루션을 모색합니다.

탐색 대체 접근 방식

이와 같은 시나리오의 경우 SQLite와 같은 데이터베이스 활용을 고려해보세요. Pandas의 to_sql 메소드는 데이터베이스에 데이터프레임을 편리하게 작성할 수 있습니다. 결과적으로 SQL 쿼리를 사용하면 효율적인 필터링 및 병합 작업이 가능합니다.

다음은 가상 데이터 프레임과 데이터베이스 연결을 사용하는 예입니다.

import pandas as pd
import sqlite3

# Sample 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"]})

# Database connection
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)

# SQL query
qry = '''
    SELECT
        start_date AS PresTermStart,
        end_date AS PresTermEnd,
        wars.date AS WarStart,
        presidents.name AS Pres
    FROM
        terms
    JOIN
        wars ON date BETWEEN start_date AND end_date
    JOIN
        presidents ON terms.president_id = presidents.president_id
'''

# Read query results into pandas dataframe
df = pd.read_sql_query(qry, conn)
로그인 후 복사

이 접근 방식을 사용하면 불필요하게 큰 데이터 프레임을 만들지 않고도 조인 및 필터링이 가능합니다. 중간 데이터프레임.

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

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿