Значение не найдено во фрейме данных в python - PullRequest
0 голосов
/ 13 марта 2019

Исходный фрейм данных содержит все 3 столбца, т.е. столбцы name, description и specialties.

Я хочу ввести название компании, сравнить ее специальности со специальностями всех других компаний, и во время сравнения, когда я найду совпадение, я хочу напечатать и сохранить все детали найденного совпадения.

df_descrip = df_original[['name', 'description']]
df_spec  = df_original[['name','specialties']]
INPUT ='TOTAL'
all_names = df_original['name']
df_original = df_original.set_index('name', drop = False)
columns = df_original.columns
for index, row in df_original.iterrows():
    if row['name'] == INPUT:
        specialties_input = df_original.loc[INPUT,'specialties']
        print('INPUT SPECIALTIES: ', specialties_input)

for spec in specialties_input:
    for item in df_spec['specialties']:
        if spec in item:
            # here I want to display details of a match

ПРИМЕЧАНИЕ. Предположим, что если я введу название компании «TOTAL» и у нее будет 5 специальностей (s1, s2, s3, s4, s5), я сравню их все со специализациями всех компаний в моем фрейме данных.скажем, я нахожу совпадение, т. е. s3 по специальностям, как я могу получить название соответствующей компании?

1 Ответ

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

Данные, которые вы предоставили, не очень чистые или воспроизводимые, поэтому я создал здесь пример данных.

При условии, что вы можете разделить специальности по ',', проще работать со списками и наборами, чем со строками для этого вида при анализе.

# Sample Data
df = pd.DataFrame({'description': ['d1', 'd2', 'd3'], 
                   'specialties': ['s1,s2,s3', 's3,s4,s5,s6', 's5,s6,s7']}, 
                  index=['name1', 'name2', 'name3'])

# 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...