对交叉点结果进行排序以仅在python中保留最大长度集

对交叉点结果进行排序以仅在python中保留最大长度集,python,python-3.x,pandas,dataframe,Python,Python 3.x,Pandas,Dataframe,我只想得到最好的5个名字,在交集中有最多的匹配数。我该怎么做?或者换句话说,将匹配项按从最大到最小的顺序排序,只保留前五个匹配项 # Sample Data df = pd.DataFrame({'description': ['d1', 'd2', 'd3', 'd4', 'd5','d6'], 'specialties': ['s1,s2,s3', 's3,s4,s5,s6', 's5,s6,s7','s3,s4,s5,s65','s35,s45,s5

我只想得到最好的5个名字,在交集中有最多的匹配数。我该怎么做?或者换句话说,将匹配项按从最大到最小的顺序排序,只保留前五个匹配项

# Sample Data
df = pd.DataFrame({'description': ['d1', 'd2', 'd3', 'd4', 'd5','d6'], 
                   'specialties': ['s1,s2,s3', 's3,s4,s5,s6', 's5,s6,s7','s3,s4,s5,s65','s35,s45,s5f,s6','s33,s4,s5,s6,s7']}, 
                   index=['name1', 'name2', 'name3','name4','name5','name6'])

# Sample Input
name_lookup = 'name3'

tgt_set = set(df.loc[name_lookup, 'specialties'].split(','))
intersection = df['specialties'].str.split(',').apply(lambda x: tgt_set.intersection(x))
match = intersection != set() # Remove companies with 0 matches

# Output:  
intersection[match] # will deliver the specialties they have in common   
df[match] # will return the data only on the ones that have at lest one specialty in common

这将提供前5名的数据:

df.loc[intersection.apply(len).sort_values().tail(5).index]
使用:

对于数据帧使用:

dftop5 = df.loc[n]

你的解决方案不起作用?预期输出是什么?我希望结果中的数据帧具有最大匹配项是的,我认为预期的数字数据是什么,解释已经有问题,但我无法验证是否理解您的需要。我希望结果中的数据帧具有最大匹配项Use dftop5=df.loc[n]我希望结果中的数据帧具有最大匹配项
dftop5 = df.loc[n]