У меня есть (очень большая) серия, содержащая ключевые слова (каждая строка содержит несколько ключевых слов, разделенных '-', например,
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. Это был бы первый шаг, чтобы получить среднее значение, которое я мог бы затем разделить на число of non-na в каждой строке
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
Возможна ли такая операция?Или есть другой быстрый способ добиться этого?