У меня есть следующий пример фрейма данных.Давайте представим, что каждая буква на самом деле является словом.Так, например, a = 'ant'
и b = 'boy'
.
id words
1 [a, b, c, d, e, f, g]
1 [h, I, o]
1
1 [a, b, c]
2 [e, f, g, m, n, q, r, s]
2 [w, j, f]
3 [l, t, m, n, q, s, a]
3 [c, d, e, f, g]
4
4 [f, g, z]
Код для создания вышеприведенного примера кадра данных:
import pandas as pd
d = {'id': [1, 1, 1, 1, 2, 2, 3, 3, 4, 4], 'words': [['a', 'b', 'c', 'd', 'e', 'f', 'g'], ['h', 'I', 'o'], '', ['a', 'b', 'c'], ['e', 'f', 'g', 'm', 'n', 'q', 'r', 's'], ['w', 'j', 'f'], ['l', 't', 'm', 'n', 'q', 's', 'a'], ['c', 'd', 'e', 'f', 'g'], '', ['f', 'g', 'z']]}
df = pd.DataFrame(data=d)
Я запускаю на нем следующий код НЛП, чтобы выполнить следующие действия: Дайте мне количество различных комбинаций из 3 словрасположены вместе из поля «слова».
from nltk.collocations import *
from nltk import ngrams
from collections import Counter
trigram_measures = nltk.collocations.BigramAssocMeasures()
finder = BigramCollocationFinder.from_documents(df['words'])
finder.nbest(trigram_measures.pmi, 100)
s = pd.Series(df['words'])
ngram_list = [pair for row in s for pair in ngrams(row, 3)]
counts = Counter(ngram_list).most_common()
df = pd.DataFrame.from_records(counts, columns=['gram', 'count'])
Пример полученного гипотетического вывода выглядит следующим образом (значения данных являются поддельными):
gram count
a, b, c 13
c, d, e 9
g, h, i 6
q, r, s 1
Проблема заключается в том, что я хочу, чтобы полученный вывод был разделен на поле «id», Мой желаемый пример выходных данных ниже (данные поддельные и случайные) :
id gram count
1 a, b, c 13
1 c, d, e 9
1 g, h, i 6
1 q, r, s 1
2 a, b, c 6
2 w, j, f 3
3 l, t, m 4
3 e, f, g 2
4 f, g, z 1
Как мне этого добиться?... получать результаты по полю "id"?