#python #pandas
Вопрос:
У меня есть фрейм данных pandas, состоящий из двух столбцов со строками в нем, как показано ниже:
word 1 word 2 cat dog dog mouse mouse dog dog dog dog mouse mouse ...
Что я хотел бы сделать в python, так это построить матрицу, которая подсчитывает, сколько раз одно слово следует за другим, как это:
cat dog mouse cat 0 1 0 dog 0 1 2 mouse 0 1 0
То, что я пробовал до сих пор, было токенизацией (но это может быть не лучший подход) и вычислением матричного соотношения (но, по-видимому pandas.DataFrame.corr
, не работает со строками).
У вас есть какие-нибудь идеи о том, как действовать дальше? Спасибо.
Ответ №1:
Вы можете использовать pandas.crosstab
и reindex
для обеспечения наличия всех комбинаций:
import numpy as np idx = np.unique(df.values.flatten()) (pd.crosstab(df['word 1'], df['word 2']) .reindex(index=idx, columns=idx, fill_value=0) )
выход:
word 2 ... cat dog mouse word 1 ... 0 0 0 0 cat 0 0 1 0 dog 0 0 1 2 mouse 1 0 1 0
NB. ...
появляется здесь как слово из-за вашего примера
Комментарии:
1. спасибо, это сработало идеально!