Как выполнить сопоставление ключевых слов в разных фреймах данных в Pandas? - PullRequest
0 голосов
/ 11 февраля 2020

У меня есть 2 кадра данных, на которых мне нужно сопоставить ключевые слова. Входные данные (df1) выглядят так:

    keyword            subtopic     
    post office        Brand        
    uspshelp uspshelp  Help         
    package delivery   Shipping     
    fed ex             Brand        
    ups fedex          Brand        
    delivery done      Shipping     
    united states      location     
    rt ups             retweet      

Это другой фрейм данных (df2), который должен использоваться для сопоставления ключевых слов:

Key     Media_type  cleaned_text
910040  facebook    will take post office
409535  twitter     need help with upshelp upshelp
218658  facebook    there no section post office alabama ups fedex
218658  facebook    there no section post office alabama ups fedex
518903  twitter     cant wait see exactly ups fedex truck package
2423281 twitter     fed ex messed seedless
763587  twitter     crazy package delivery rammed car
827572  twitter     formatting idead delivery done
2404106 facebook    supoused mexico united states america
1077739 twitter     rt ups

Я хочу отобразить Столбец 'ключевого слова' в df1 в столбец 'cleaned_text' в df2, основанный на нескольких условиях:

  1. Одна строка в 'ключевом слове' может быть сопоставлена ​​с несколькими строками в 'cleaned_text' (Один ко многим отношения)
  2. Следует выбирать целое ключевое слово вместе, а не только отдельные слова.
  3. Если «ключевое слово» соответствует более чем одной строке в «cleaned_Text», оно должно создавать новые записи в выходном фрейме данных (df3)

Вот как выходной фрейм данных (df3) ) должно выглядеть так:

Key     Media_type  cleaned_text                                    keyword               subtopic  
910040  facebook    will take post office                           post office           Brand 
409535  twitter     need help with upshelp upshelp                  uspshelp uspshelp     Help  
218658  facebook    there no section post office alabama ups fedex  post office           Brand 
218658  facebook    there no section post office alabama ups fedex  ups fedex             Brand 
518903  twitter     cant wait see exactly ups fedex truck package   ups fedex             Brand 
2423281 twitter     fed ex messed seedless                          fed ex messed         Brand 
763587  twitter     crazy package delivery rammed car               package delivery      Shipping  
827572  twitter     formatting idead delivery done                  delivery done         Shipping  
2404106 facebook    supoused mexico united states america           united states america location  
1077739 twitter     rt ups                                          rt ups                retweet               

1 Ответ

1 голос
/ 12 февраля 2020

Как насчет преобразования вашего df1 в словарь? А потом я oop через ваш df2 и поиск совпадений. Возможно, это не самый эффективный способ, но он очень удобочитаемый

keyword_dict = {row.keyword: row.subtopic for row in df1.itertuples()}
df3_data = []
for row in df2.itertuples():
    text = row.cleaned_text
    for keyword in keyword_dict:
        if keyword in text:
            df3_row = [row.Key, row.Media_type, row.cleaned_text, keyword, keyword_dict[keyword]]
            df3_data.append(df3_row)

df3_columns = list(df2.columns) + list(df1.columns)
df3 = pd.DataFrame(df3_data, columns=df3_columns)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...