Как извлечь строку из столбца при совпадении ключа словаря - PullRequest
1 голос
/ 31 октября 2019

У меня есть такой фрейм данных:

**Domain**         **URL**  
Amazon         amazon.com/xyz/butter
Amazon         amazon.com/xyz/orange
Facebook       facebook.com/male
Google         google.com/airport
Google         goolge.com/car

Это просто воображаемые данные. У меня есть данные о потоке кликов, где я хочу использовать столбцы «Домен» и «URL». На самом деле у меня есть список многих ключевых слов, которые я сохранил в словаре, и мне нужно найти его в URL, а затем извлечь его, чтобы создать новый столбец.

У меня есть словарь, подобный этому:

dict_keyword = {'Facebook': ['boy', 'girl', 'man'], 'Google': ['airport', 'car', 'konfigurator'], 'Amazon': ['apple', 'orange', 'butter']

Я хочу получить вывод, подобный этому:

  **Domain**         **URL**                     Keyword
    Amazon         amazon.com/xyz/butter         butter
    Amazon         amazon.com/xyz/orange         orange
    Facebook       facebook.com/male             male
    Google         google.com/airport            airport
    Google         goolge.com/car                car

Пока я хочу сделать только одну строку кода,Я пытаюсь использовать

df['Keyword'] = df.apply(lambda x: any(substring in x.URL for substring in dict_config[x.Domain]) ,axis =1)

Я получаю только логическое значение, но хочу вернуть ключевое слово. Любая помощь?

1 Ответ

1 голос
/ 31 октября 2019

Идея состоит в том, чтобы добавить фильтрацию с if в конец списка, а также добавили next с iter для возвращаемого значения по умолчанию, если нет совпадения:

f = lambda x: next(iter([sub for sub in dict_config[x.Domain] if sub in x.URL]), 'no match')
df['Keyword'] = df.apply(f, axis=1)
print (df)
     Domain                    URL   Keyword
0    Amazon  amazon.com/xyz/butter    butter
1    Amazon  amazon.com/xyz/orange    orange
2  Facebook      facebook.com/male  no match
3    Google     google.com/airport   airport
4    Google         goolge.com/car       car

Если возможно, не совпадать также сначала Domain решение для столбца изменено на .get для поиска со значением по умолчанию:

print (df)
     Domain                    URL
0    Amazon  amazon.com/xyz/butter
1    Amazon  amazon.com/xyz/orange
2  Facebook      facebook.com/male
3    Google     google.com/airport
4   Google1         goolge.com/car <- changed last value to Google1

dict_config = {'Facebook': ['boy', 'girl', 'man'], 
               'Google': ['airport', 'car', 'konfigurator'],
               'Amazon': ['apple', 'orange', 'butter']}

f = lambda x: next(iter([sub for sub in dict_config.get(x.Domain, '') 
                         if sub in x.URL]), 'no match')
df['Keyword'] = df.apply(f, axis=1)
     Domain                    URL   Keyword
0    Amazon  amazon.com/xyz/butter    butter
1    Amazon  amazon.com/xyz/orange    orange
2  Facebook      facebook.com/male  no match
3    Google     google.com/airport   airport
4   Google1         goolge.com/car  no match
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...