Python 熊猫:根据确切ID和最近日期合并
我正在尝试合并两列上的两个数据帧。一列具有唯一标识符,可用于简单地Python 熊猫:根据确切ID和最近日期合并,python,pandas,merge,Python,Pandas,Merge,我正在尝试合并两列上的两个数据帧。一列具有唯一标识符,可用于简单地.merge()两个数据帧。但是,第二列merge实际上会使用.merge\u asof(),因为它需要查找最近的日期,而不是精确的日期匹配 这里有一个类似的问题:,但它是在将近三年前被提出和回答的,merge\u asof()是一个更新得多的补充 几个月前我问了一个类似的问题,但是解决方案只需要使用merge\u asof(),而不需要任何精确的匹配 为了包含一些代码,它看起来像这样: df=pd.merge\u asof(df
.merge()
两个数据帧。但是,第二列merge实际上会使用.merge\u asof()
,因为它需要查找最近的日期,而不是精确的日期匹配
这里有一个类似的问题:,但它是在将近三年前被提出和回答的,merge\u asof()
是一个更新得多的补充
几个月前我问了一个类似的问题,但是解决方案只需要使用merge\u asof()
,而不需要任何精确的匹配
为了包含一些代码,它看起来像这样:
df=pd.merge\u asof(df1,df2,左上=['ID','date\u time'],右上=['ID','date\u time'])
其中,ID
将精确匹配,但日期时间
将“接近匹配”
非常感谢您的帮助。请考虑首先在
ID上进行合并,然后在匹配的ID上运行,以返回第一个数据帧的最高日期时间,小于第二个数据帧的当前行日期时间
# INITIAL MERGE (CROSS-PRODUCT OF ALL ID PAIRINGS)
mdf = pd.merge(df1, df2, on=['ID'])
def f(row):
col = mdf[(mdf['ID'] == row['ID']) &
(mdf['date_time_x'] < row['date_time_y'])]['date_time_x'].max()
return col
# FILTER BY MATCHED DATES TO CONDITIONAL MAX
mdf = mdf[mdf['date_time_x'] == mdf.apply(f, axis=1)].reset_index(drop=True)
#初始合并(所有ID对的叉积)
mdf=pd.merge(df1,df2,on=['ID'])
def f(世界其他地区):
col=mdf[(mdf['ID']==行['ID'])和
(mdf['date\u time\u x']|
这假设您希望保留df2的所有行(即右连接)。只需翻转左连接的x/y后缀即可。我熟悉这些准则,但那些知道我的要求的人只需要我写的东西。你能发布你的解决方案吗?我也面临同样的问题。谢谢冻糕——我想我实际上解决了我自己的问题,我相信添加kwarg:by='ID'
是关键。非常感谢。我不太确定你的答案或者我是如何帮助你的。请为未来的读者自由回答您自己的问题,并等待几天接受您自己的问题。我一直在等待这个解决方案如何不起作用的回应。请注意,这仅选择最大日期镜像asof
(不是最近的)。