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