Найти пропущенные слова между двумя pandas столбцами - PullRequest
1 голос
/ 13 марта 2020

У меня есть два столбца с компонентами, и я хочу сравнить, если в новом столбце слово отсутствует или отличается от старого столбца

Col 1

Index     Old
0         Caramel Color, Color, Citric Acid, Treated Water, Caffeine, Flavour Enhancer
1         Natural Extracts, Glycol, Ethanol,

Col 2

Index     New
0         Caramel Color, Color, Citric Acid, Water, Flavour Reducer
1         Glycol, Ethanol

Я пробовал это решение, но, похоже, оно не работает должным образом

L = df['old']
values_not_in_array = df[~df.old.isin(L)].old
values_in_array = df[df.old(L)].old

Какое лучшее решение для создания столбца со значениями, которые отсутствуют или отличаются от старого столбца, который не находится в строке нового столбца?

Ответы [ 2 ]

3 голосов
/ 13 марта 2020

Преобразование разделенных значений в наборы и вычитание, последнее при необходимости объединение в строки:

df['diff'] = [', '.join(set(o.split(', ')) - set(n.split(', '))) 
                                                          for o, n in zip(df.Old, df.New)]
print (df)
                                                 Old  \
0  Caramel Color, Color, Citric Acid, Treated Wat...   
1                  Natural Extracts, Glycol, Ethanol   

                                                 New  \
0  Caramel Color, Color, Citric Acid, Water, Flav...   
1                                    Glycol, Ethanol   

                                       diff  
0  Treated Water, Flavour Enhance, Caffeine  
1                          Natural Extracts  

df['miss'] = [', '.join(set(n.split(', ')) - set(o.split(', '))) 
                                                           for o, n in zip(df.Old, df.New)]
print (df)
                                                 Old  \
0  Caramel Color, Color, Citric Acid, Treated Wat...   
1                  Natural Extracts, Glycol, Ethanol   

                                                 New                    miss  
0  Caramel Color, Color, Citric Acid, Water, Flav...  Water, Flavour Reducer  
1                                    Glycol, Ethanol                          
0 голосов
/ 13 марта 2020

Это можно сделать, применив метод, который преобразует значение столбца в список слов, а затем находит разницу и сохраняет ее в новом столбце:

import pandas as pd

dic = {
    'Old': ['Caramel Color, Color, Citric Acid, Treated Water, Caffeine, Flavour Enhancer', 'Natural Extracts, Glycol, Ethanol,'],
    'New': ['Caramel Color, Color, Citric Acid, Water, Flavour Reducer', 'Glycol, Ethanol'],
}

df = pd.DataFrame(dic)

print(df)

df['MissingWord'] = df.apply(lambda x: ', '.join(list(set(x['Old'].split(',')) - set(x['New'].split(',')))), axis=1)

print(df['MissingWord'])

вывод:

0     Treated Water,  Caffeine,  Flavour Enhancer
1                      Glycol, , Natural Extracts
Name: MissingWord, dtype: object
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...