Текстовый майнинг с Python и пандами - PullRequest
0 голосов
/ 27 ноября 2018

возможно, это дубликат, но мне не повезло найти его ...

Я работаю над некоторым анализом текста в Python с помощью Pandas.У меня есть слова в DataFrame, а рядом с ним стоит Портер с какой-то другой статистикой.Это означает, что похожие слова, имеющие точно такой же ствол Портера, могут быть найдены в этом кадре данных.Я хотел бы объединить эти похожие слова в новом столбце, а затем удалить дубликаты, касающиеся ствола Портера.

import pandas as pd
pda = pd.DataFrame.from_dict({'Word': ['bank', 'hold', 'banking', 'holding', 'bank'], 'Porter': ['bank', 'hold', 'bank', 'hold', 'bank'], 'SomeData': ['12', '13', '12', '13', '12']})

pdm = pd.DataFrame(pda.groupby(['Porter'])['Word'].apply(list))

Что бы я хотел иметь:

# Word      Porter               Merged    SomeData
# bank        bank      [bank, banking]          12
# hold        hold      [hold, holding]          13
# banking     bank      [bank, banking]          12
# holding     hold      [hold, holding]          13
# bank        bank      [bank, banking]          12

После удаления дубликатов:

# Word      Porter               Merged    SomeData
# bank        bank      [bank, banking]          12
# hold        hold      [hold, holding]          13

Я пытался использовать, но я не приблизился к своим целям.

pda.join(pdm, on="Porter", how="left")``

Спасибо за любую помощь заранее.

РЕДАКТИРОВАТЬ: код выше пересмотрен

1 Ответ

0 голосов
/ 27 ноября 2018

Вы можете применить к этому набор вместо списка, поэтому вы автоматически удаляете все дубликаты:

import pandas as pd
pda = pd.DataFrame.from_dict({'Word': ['bank', 'hold', 'banking', 'holding', 'bank'], 
                              'Porter': ['bank', 'hold', 'bank', 'hold', 'bank'], 
                              'SomeData': ['12', '13', '12', '13', '12']})

pdm = pd.DataFrame(pda.groupby(['Porter'])['Word'].apply(set))
...