сортировка результатов пересечения для сохранения максимальной длины, заданной только в питоне - PullRequest
0 голосов
/ 18 марта 2019

Я хочу получить только 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

Ответы [ 2 ]

1 голос
/ 18 марта 2019

Это доставит данные для топ-5:

df.loc[intersection.apply(len).sort_values().tail(5).index]
0 голосов
/ 18 марта 2019

Использование:

#s = intersection[intersection != set()] 
#alternative
s = intersection[intersection.astype(bool)]
n = s.str.len().sort_values(ascending=False).index[:5]
print (n)
Index(['name6', 'name3', 'name2', 'name5', 'name4'], dtype='object')

Для использования в DataFrame:

dftop5 = df.loc[n]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...