날짜 범위에서 조건부 조인을 사용하여 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!