У меня есть (очень большая) серия, содержащая ключевые слова (каждая строка содержит несколько ключевых слов, разделенных знаком '-', например
In[5]: word_series
Out[5]:
0 the-cat-is-pink
1 blue-sea
2 best-job-ever
dtype: object
У меня есть еще одна серия, которая содержит атрибуты оценки для каждого слова (слова - это индекс, оценки - значения), например:
In[7]: all_scores
Out[7]:
the 0.34
cat 0.56
best 0.01
ever 0.77
is 0.12
pink 0.34
job 0.01
sea 0.87
blue 0.65
dtype: float64
Все слова из моей word_series появляются в моих оценках. Я пытаюсь найти самый быстрый способ присвоить оценку каждой строке word_series на основе средней оценки каждого из ее слов из all_scores. Если строка не указана, оценка должна быть средним значением.
Я пробовал применить этот способ, но это было слишком медленно.
scores = word_series.apply(
lambda x: all_scores[x.split('-')].mean()).fillna(
all_scores.mean())
Затем я подумал, что могу разделить all_words на столбцы с помощью str.replace и, возможно, выполнить операцию типа умножения матриц, используя эту новую матрицу M и мои слова, такие как M.mul (all_scores), где каждая строка в M будет сопоставлена со значениями на основе индекса из all_scores. Это был бы первый шаг, чтобы получить среднее значение, которое я мог бы затем разделить на количество нон-на в каждой строке
In[9]: all_words.str.split('-', expand=True)
Out[9]:
0 1 2 3
0 the cat is pink
1 blue sea None None
2 best job ever None
Возможна ли такая операция? Или есть еще один быстрый способ добиться этого?