如何合并具有多个条件/列的数据框

时间:2019-08-28 08:21:13

标签: python pandas

嗨,我有两个主要框架,我想使用“模型”,“ ID”,“日期和时间”列进行合并。

这是第一个日期框架(df1):

ProductName Model       Date&Time
Jugger      2_MXAA_33   2019-08-12 14:37:00
Memz        3_MXA1_44   2019-08-12 14:37:00

第二个数据帧(df2):

Company    ID   Date&Time
A_Company   2   2019-08-12 14:39:00

当型号的第一个数字与ID相同时,型号和ID应匹配。这是预期的输出:

ProductName Model       Date&Time            Company    ID
Jugger      2_MXAA_33   2019-08-12 14:37:00  A_Company  2

我当前的解决方案只能使用 merge_asof 使用日期和时间进行合并:

tol = pd.Timedelta('2 minute')
merged_df= pd.merge_asof(df1, df2.sort_values('Date&Time'), on='Date&Time', direction="nearest", tolerance=tol)

请问如何同时使用Model和ID列以及Date&Time进行合并?对此表示赞赏。非常感谢。

1 个答案:

答案 0 :(得分:0)

df1 = pd.DataFrame({"ProductName": ["Jugger", "Memz"],
                    "Model": ["2_MXAA_33", "3_MXA1_44"],
                    "Date&Time": ["2019-08-12 14:37:00", "2019-08-12 14:37:00"]})
df2= pd.DataFrame({"Company": ["A_Company"],
                    "ID": [2],
                    "Date&Time": ["2019-08-12 14:39:00"]})
df1['Date&Time'] = pd.to_datetime(df1['Date&Time'])
df2['Date&Time'] = pd.to_datetime(df2['Date&Time'])

我假设ID的{​​{1}}列是由df1中给出的第一个数字创建的,所以创建此列:

Model

我不确定然后如何知道如何将df1["ID"] = df1["Model"].str[0].astype(int) df1 ProductName Model Date&Time ID 0 Jugger 2_MXAA_33 2019-08-12 14:37:00 2 1 Memz 3_MXA1_44 2019-08-12 14:37:00 3 添加到Company,但是正如@Mark Wang建议的那样,使用df1

by

您的最终tol = pd.Timedelta('2 minute') pd.merge_asof(df1, df2.sort_values('Date&Time'), on='Date&Time', by="ID", direction="nearest", tolerance=tol) ProductName Model Date&Time ID Company 0 Jugger 2_MXAA_33 2019-08-12 14:37:00 2 A_Company 1 Memz 3_MXA1_44 2019-08-12 14:37:00 3 NaN 如下所示:

merge

但同样,我不确定如何知道pd.merge_asof(df1, df2.sort_values('Date&Time'), on='Date&Time', by=['ID', 'Company'], direction="nearest", tolerance=tol) 的{​​{1}}。