首页 > 解决方案 > 如何过滤日期范围内两个数据框之间的数据?

问题描述

假设我有两个数据框 df1 和 df2 如下:

df1

Start_Date  End_Date    KGS
20191021    20191031    1759
20191101    20191130    36191
20191201    20191231    25953
20200101    20200131    49085
20200201    20200228    9153

df2

        id    scene_id origin   tea_item    week_commencing
0   1762333097  3279    JA       AB21JA      05-01-2020 
1   1762333098  3279    JA       AB21JA      26-04-2020 
2   1762333099  3279    JA       AB21JA      09-02-2020 
3   1762333100  3279    JA       AB21JA      19-01-2020 
4   1762333101  3279    JA       AB21JA      29-12-2019 

df2.week_commencing现在我需要过滤介于df1.Start_Date和之间的df2 数据帧df1.End_Date

标签: pythonpandasdataframe

解决方案


将所有 datetimelike 列转换为datetimes,使用 cross join byDataFrame.merge和 last filter bySeries.betweenboolean indexing

df1['Start_Date'] = pd.to_datetime(df1['Start_Date'], format='%Y%m%d')
df1['End_Date'] = pd.to_datetime(df1['End_Date'], format='%Y%m%d')

df2['week_commencing'] = pd.to_datetime(df2['week_commencing'])

df = df1.assign(a=1).merge(df1.assign(a=1), on='a')
df = df[df.week_commencing.between(df.Start_Date,df.End_Date)].drop('a', axis=1)

推荐阅读