如何匹配两个DataFrame的相同ID并查找距离给定日期最接近的日期
实现方法
思路
- 统一两个DataFrame的
Date列格式为datetime类型,避免日期计算出错 - 以ID为关联键合并两个表,让df1的每条数据都关联上df2中同ID的所有日期数据
- 计算df2日期与df1对应日期的绝对差值
- 按df1的ID和原始日期分组,取差值最小的对应df2日期即为最接近日期
代码实现
import pandas as pd # 转换日期列为datetime格式,核心步骤不可省略 df1['Date'] = pd.to_datetime(df1['Date']) df2['Date'] = pd.to_datetime(df2['Date']) # 按ID关联两个表 merged_df = df1.merge(df2, on='ID', suffixes=('', '_df2')) # 计算日期差绝对值 merged_df['diff'] = abs(merged_df['Date'] - merged_df['Date_df2']) # 分组取差最小的行 res_df = merged_df.loc[merged_df.groupby(['ID', 'Date'])['diff'].idxmin()] # 重命名列得到最终结果 res_df = res_df[['ID', 'Date', 'Date_df2']].rename(columns={'Date_df2': 'Closest Date'}) # 可选:将日期列转回字符串格式输出 # res_df[['Date', 'Closest Date']] = res_df[['Date', 'Closest Date']].dt.strftime('%Y-%m-%d')
运行上述代码代入你提供的示例数据,即可得到完全匹配的预期输出。
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

