Предположим, у меня есть следующий словарь:
myDict= {'is':'A', 'th':'B', 'ro':'C'}
и следующий Pandas фрейм данных с одним столбцом строк (без индекса):
checkColumn
This is the first row
Here is the second row
Row three is here
And another row is here
Я хочу создать второй столбец, который присваивает значение из словаря, ключ которого появляется первым в каждой строке. Итак, результат, который я ищу:
checkColumn labelAssignment
This is the first row B
Here is the second row A
Row three is here C
And another row is here B
Несколько параметров:
- В каждой строке может отображаться несколько ключей. Например, в третьем ряду отображаются все три клавиши, но им назначается C, поскольку «ro» появляется первым.
- подстроки могут быть частями слов, поэтому разбейте строку на отдельные слова и проверьте их не будет работать.
- мне нужно, чтобы он был без учета регистра, так что 'ro' соответствует 'Row'.
- Если ключ не найден, можно указать np.nan или пустую строку .
Почти все ответы по SO, которые я нашел до сих пор, касаются либо (a) нахождения первого значения ряда, но не первой подстроки из каждого значения этого ряда, либо (b ) первое вхождение подстроки в строке без применения ее к pandas кадру данных. Например, этот ответ показывает, как проверить, содержится ли ключ в словаре в строке, но поскольку это pandas, я не должен использовать циклы for
, а понимание списка возвращает список, который я не хочу ... Я хочу вернуть само значение.
Псевдокод, который я имею в виду, использует np.where:
df['labelAssignment'] = np.where(check for first occurrence of myDict key in df.checkColumn, corresponding value from myDict, '')
Но как мне сформировать синтаксис этого оператора np.where?