Вы можете создать словарь через groupby
+ to_dict
. Затем вычислите уникальные значения и удалите их с помощью set
и словаря. Обратите внимание, в отличие от вашего примера, я не применяю каких-либо проверок, например, Я предполагаю, что у Джонни всегда будет заглавная буква J.
from collections import Counter
from itertools import chain
df = pd.DataFrame({'Textual': ['Hi Johnny how are you today', 'Dear Johnny', 'Hey Johnny', 'To Johnny'],
'Category': ['Informal', 'Formal', 'Informal', 'Formal']})
def return_unique(x):
return list(set(' '.join(x.values).split()))
res = df.groupby('Category')['Textual'].apply(return_unique).to_dict()
c = Counter(chain.from_iterable(res.values())).items()
unique = {k for k, v in c if v == 1}
res = {k: list(set(v) & unique) for k, v in res.items()}
{'Formal': ['To', 'Dear'],
'Informal': ['today', 'how', 'Hi', 'Hey', 'are', 'you']}