如您所说,这在SQL中非常容易,那么为什么不在SQL中这样做呢?
import pandas as pdimport sqlite3#We'll use firelynx's tables: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"]})#Make the db in memoryconn = sqlite3.connect(':memory:')#write the tablesterms.to_sql('terms', conn, index=False)presidents.to_sql('presidents', conn, index=False)war_declarations.to_sql('wars', conn, index=False)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)df:
PresTermStart PresTermEnd WarStart Pres0 2001-01-31 00:00:00 2005-01-31 00:00:00 2001-09-14 00:00:00 Bush1 2001-01-31 00:00:00 2005-01-31 00:00:00 2003-03-03 00:00:00 Bush



