У меня есть фрейм данных, который структурирован таким образом, чтобы отражать ход разговора (то есть, где каждая строка является ссылкой на то, что кто-то сказал. См. Ниже:
import pandas as pd
import numpy as np
mydata = [[1, ['hello', 'there', 'how', 'are', 'you']],
[2, ['i','am', 'well', 'how' 'are', 'you']],
[1, ['nice', 'weather', 'is', 'it', 'not']],
[2, ['indeed', 'it','is', 'nice', 'weather']]]
df = pd.DataFrame(mydata)
df.columns=['speaker','turn']
Я Сравнение использования слов на каждом и левом соседних поворотах (то есть на предыдущем повороте). До сих пор я использовал следующее для вычисления пересечения между этими двумя точками:
df['adjacent_turn'] = df.turn.shift(1)
df['intersection'] = df.apply(
lambda x: np.intersect1d(x.turn, x.adjacent_turn), axis=1
)
Что бы я хотел Теперь, например, есть еще один столбец со словами, которые находятся в столбце 'turn', но , а не в соседнем столбце. Я попробовал то, что мне показалось работоспособным вариантом, но, похоже, я собираюсь где-то неправильно.
df['turn_only'] = df.apply(
lambda x: [word for word in x.turn if word not in x.adjacent_turn], axis=1
)
Редактировать: То, что я должен был упомянуть раньше, это то, что важно, чтобы я сохранил порядок первоначального поворота. То есть, если я опускаю слово «счастливый» в повороте, который говорит «я чувствую себя счастливым сегодня», мне нужно, чтобы столбец непересекающихся значений возвращал «я», «я», «чувство», «сегодня», а не в случайном порядке.