我试图在Python3.5中的2个数据帧上实现一种连接功能,逻辑上的唯一区别是,它应该只提供第一个匹配作为输出,而忽略其余的匹配记录
例如以下-
输入数据帧-
ID | Name
1 | Sanket
1 | Sanket
1 | Sanket
2 | Robin
2 | Robin
3 | Vishal
3 | Vishal
查找数据帧-
ID | Name
1 | Sanket
2 | Robin
3 | Vishal
4 | Umesh
我的加入条件是Lookup.name>;输入.名称
因此,对于Input.ID==1,在查找“Vishal”和“Umesh”中有2个匹配项,它应该只提供第一个匹配项,即“Vishal”,而忽略其余的匹配记录
对于Input.ID==2,有3个匹配项“Sanket”、“Vishal”和“Umesh”,它应该只提供第一个匹配项,即“Sanket”,而忽略其余的匹配项
输出应为-
Input.ID | Input.Name | Lookup.ID | Lookup.Name
1 | Sanket | 3 | Vishal
1 | Sanket | 3 | Vishal
1 | Sanket | 3 | Vishal
2 | Robin | 1 | Sanket
2 | Robin | 1 | Sanket
3 | Vishal | NaN | NaN
3 | Vishal | NaN | NaN
我主要尝试了以下两件事,如果需要,我可以提供代码-
select IP.*, Lookup.[ID] as [lookup_ID],Lookup.[Name] as [lookup_Name]
from InputDF IP
LEFT join
(
select Lookup.* from InputDF IP LEFT join LookupDF Lookup on [Lookup].[Name] > [IP].[Name] limit 1
)
Lookup
on [Lookup].[Name] > [IP].[Name]
在查询中,由于“limit1”子句,它为所有输入行提供了“Vishal”作为lookup.Name
总而言之,我试图将其作为excel Vlookup函数使用,只使用“>;”条件
有人能帮忙并提出一些方法来让这项工作顺利进行吗
谢谢大家!! 桑克特凯尔卡
这里有一种方法你可以试试
首先,对两个数据帧执行交叉连接或笛卡尔积
重命名列
使用密集列组将查找行与输入行正确配对
在没有更大名称的行中添加,如本例中的Vishal
清除输出数据帧
输出
注意:由于存在NaN值,lookup_id列显示为浮点
相关问题 更多 >
编程相关推荐