Я бы просто установил положительное настроение на 1, отрицательное настроение на -1, а нейтральное на 0. Затем масштабируем каждое в соответствии с их процентами, чтобы получить составной балл.
Так что для упомянутого примера оценка было бы
score = positive% * positive_score + neutral % * neutral_score + negative % * negative_score
score = .3937 * 1 + .4205 * 0 + .1858 * -1
score = .2079
Интуитивно это имеет смысл, потому что если бы у нас были все положительные оценки, то у нас был бы максимальный балл 1. Если бы у нас были все отрицательные баллы, то у нас был бы минимальный балл -1, и нейтральный счет 0.
Вы можете использовать функцию iterrows, чтобы перебрать все строки, а затем написать функцию, чтобы объединить эти оценки в новый столбец или обновить существующий столбец.