[英]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'])
我假设df1
的ID
列是由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
,但随后由于@马克王建议,使用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)
但是同样,我不确定如何知道df1
的company
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.