elP*_*tor 5 python merge pandas
我正在尝试在两列上合并两个Pandas数据框。一列具有唯一的标识符,该标识符可用于仅简化.merge()两个数据帧。但是,第二列合并实际上会使用,.merge_asof()因为它需要找到最接近的日期,而不是确切的日期匹配。
这里有一个类似的问题:熊猫在名称和最近日期上合并,但它是在三年前提出并回答的,它merge_asof()是一个较新的添加。
几个月前,我在这里提出了类似的问题,但是该解决方案只需要使用merge_asof()而无需任何精确匹配。
为了包括一些代码,它看起来像这样:
df = pd.merge_asof(df1, df2, left_on=['ID','date_time'], right_on=['ID','date_time'])
的位置ID将完全匹配,而date_time的位置将是“接近匹配”。
任何帮助是极大的赞赏。
考虑首先进行合并ID,然后运行 aDataFrame.apply以从第一个数据帧返回小于第二个数据帧中当前行日期时间的匹配 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)
Run Code Online (Sandbox Code Playgroud)
这假设您想要保留 df2 的所有行(即right join)。只需翻转 _x / _y 后缀即可进行左连接。
| 归档时间: |
|
| 查看次数: |
1210 次 |
| 最近记录: |