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

2024-09-30 16:30:06 发布

您现在位置:Python中文网/ 问答频道 /正文

嗨,我有两个主要的框架,我想合并使用列模型,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列以及日期和时间合并吗?谢谢你的建议。非常感谢。你知道吗


Tags: 模型框架iddatemodeltime时间merge
1条回答
网友
1楼 · 发布于 2024-09-30 16:30:06
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

我不知道你怎么知道如何把Company加到df1,但是正如@Mark Wang所建议的,使用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)

但是,我不知道如何知道companydf1。你知道吗

相关问题 更多 >