[英]Merge two dataframes if data of a column in first dataframe exists in any of the columns of another dataframe in python
I have two data frames I need to merge.我有两个需要合并的数据框。 The first one is:第一个是:
page value
shoes 554
sneakers 226
sandals 114
boots 821
T-shirt 213
mobile-phone 284
laptop 361
The second data frame is:第二个数据框是:
path1 path2 path3 path4
fashion footwear shoes-and-other shoes
fashion footwear shoes-and-other sneakers
fashion footwear sandals NaN
fashion footwear shirts T-shirt
electronic devices mobile-and-tablet mobile-phone
electronic devices laptop NaN
My expected output will be:我预期的 output 将是:
path1 path2 path3 path4 page value
fashion footwear shoes-and-other shoes shoes 554
fashion footwear shoes-and-other sneakers sneakers 226
fashion footwear sandals NaN sandals 114
fashion footwear shirts T-shirt T-shirt 213
electronic devices mobile-and-tablet mobile-phone mobile-phone 284
electronic devices laptop NaN laptop 361
I want to join these two data frames if any of the page
strings in the first data frame exists in the path1
or path2
, or path3
, or path4
columns of the second data frame.如果第一个数据帧中的任何page
字符串存在于第二个数据帧的path1
或path2
或path3
或path4
列中,我想加入这两个数据帧。 Notice that page
of the first data frame might be matched with path1
of the second data frame and I have a variety of situations.请注意,第一个数据帧的page
可能与第二个数据帧的path1
匹配,我有多种情况。
Is there a simple pythonic way?有没有简单的pythonic方式?
Let us try where
with ffill
create the merge key, then merge
让我们尝试使用ffill
where
创建合并键,然后merge
df1['page'] = df1.where(df1.isin(df.page.tolist())).ffill(1).iloc[:,-1]
df1 = df1.merge(df, how='left')
df1
Out[131]:
path1 path2 path3 path4 page value
0 fashion footwear shoes-and-other shoes shoes 554
1 fashion footwear shoes-and-other sneakers sneakers 226
2 fashion footwear sandals NaN sandals 114
3 fashion footwear shirts T-shirt T-shirt 213
4 electronic devices mobile-and-tablet mobile-phone mobile-phone 284
5 electronic devices laptop NaN laptop 361
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.