python - 如何合并两个数据框以匹配匹配的第一行或下一行
问题描述
我想合并两个数据框。
一个看起来像这样的
Df1
ID date A
1 201901 5
2 201902 6
Df2
ID date2 B
1 201812 3
1 201811 2
1 201810 1
我想要与 ID 合并,并将最近 date2 的列向后添加到 date1,例如
ID date A Date 2 B
1 201901 5 201812 3
1 201902 6 201812 3
有任何想法吗?
解决方案
您的逻辑与您的输出不匹配,但这应该有效:
首先让我们使用一个函数来帮助我们使用 numpy 找到最接近的值,我们将遍历您的数据框列并创建一个字典。
此功能的全部功劳归于 Ubuntu:
import numpy as np
def find_nearest(array, value):
array = np.asarray(array)
idx = (np.abs(array - value)).argmin()
return array[idx]
df1['date2'] = df1['date'].apply(lambda x : find_nearest(df2['date2'],x))
print(df1)
ID date A date2
0 1 201901 5 201812
1 2 201902 6 201812
现在我们使用 df1 中的 apply ` 创建 date2 列并在此合并。
new_df = pd.merge(df1,df2,on=['date2','ID'],how='left') # change behavior to get your result.
print(new_df)
ID date A date2 B
0 1 201901 5 201812 3.0
1 2 201902 6 201812 NaN
推荐阅读
- open-policy-agent - 如何将 OPA 作为库嵌入到低延迟 C++ 进程中
- c - 当包含空白时,scanf 需要额外的最后输入
- php - 从 php 函数将 php 变量插入 HTML 表单字段
- javascript - Click 正在处理每个嵌套的孩子,如何使用 jquery 只点击最近的孩子?
- python - 如何在复选框 tkinter 中显示价格?
- excel - 如何创建根据条件vba创建各种验证列表的宏
- java - 如何在 Android Studio (Kotlin) 中使用 .NET TripleDESCryptoServiceProvider?
- reactjs - 仅在单击按钮时才在 Vaadin 7 中添加 React 组件
- java - 我想在android java中动态添加不少于5个编辑文本
- lua - init.lua 中的 WSL 剪贴板 win32yank