嗨,我有两个主要框架,我想使用“模型”,“ 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进行合并?对此表示赞赏。非常感谢。
答案 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}}。