如何筛选两个DataFrame:获取start date大于A的End date的B子集
解决方法
首先要确保两个DataFrame的日期列是datetime类型,否则字符串格式的日期比较会出错,先做类型转换:
import pandas as pd # 转换A的End date列为datetime A['End date'] = pd.to_datetime(A['End date']) # 转换B的start date列为datetime B['start date'] = pd.to_datetime(B['start date'])
接下来分两种常见场景处理:
场景1:B的子集需要满足start date大于A中所有的End date
如果你的需求是筛选出B中所有start date晚于A里最晚的End date的行,只需先获取A的最大End date,再过滤B:
# 获取A中最晚的End date max_end_date = A['End date'].max() # 筛选B的子集 B_subset = B[B['start date'] > max_end_date]
场景2:A和B有对应关联键(比如ID),需匹配对应行的End date过滤
如果A和B存在共同的标识列(如用户ID、项目ID),需要筛选B中start date大于对应行的End date的记录,可以先合并两个DataFrame,再过滤:
# 仅保留A中关联键和End date列,与B合并 merged_df = B.merge(A[['ID', 'End date']], on='ID', how='left') # 过滤符合条件的行,并移除合并进来的End date列 B_subset = merged_df[merged_df['start date'] > merged_df['End date']].drop('End date', axis=1)
执行完后,B_subset就是你要的目标子集。
内容的提问来源于stack exchange,提问作者Lakshmikanth
相关产品推荐
相关产品推荐

