Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 熊猫:根据确切ID和最近日期合并_Python_Pandas_Merge - Fatal编程技术网

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
(不是最近的)。