繁体   English   中英

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

[英]How to merge dataframes with multiple conditions/columns

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

这是第一个dateframe(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使用日期和时间进行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进行合并的帮助? 对此表示赞赏。 非常感谢。

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'])

我假设df1ID列是由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

我不知道你又如何知道如何添加Companydf1 ,但随后由于@马克王建议,使用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)

但是同样,我不确定如何知道df1company

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM