Рассчитать общую взвешенную оценку на основе двух фреймов данных в Python - PullRequest
1 голос
/ 14 июля 2020

У меня есть две таблицы в файле Excel из этой ссылки , в которых вы можете увидеть два листа:

Лист 1:

enter image description here

Sheet 2:

введите описание изображения здесь

Теперь мне нужно вычислить total score на основе Input значений из Input листа, лог c вычислений выглядит следующим образом: если входное значение 1, затем вычислить по Level score * Weight для этого элемента, если это 0, игнорировать эти элементы. Наконец, нам нужно суммировать взвешенные баллы, чтобы получить общий балл.

Как мы можем сделать это в Pandas или других Python пакетах?

Спасибо.

Ответы [ 2 ]

1 голос
/ 14 июля 2020

Вы можете читать Excel с помощью:

input_df = pd.read_excel('../../../../Downloads/test.xlsx', sheet_name='input').fillna(method='ffill')

valuate_df = pd.read_excel('../../../../Downloads/test.xlsx', sheet_name='valuate').fillna(method='ffill')

Затем вы должны объединить их в одну таблицу. Если вы уверены, что они имеют одинаковый порядок, используйте это:

df = input_df.join(valuate_df[['Weight', 'Level score']])

Он выбирает два столбца ['Weight', 'Level score'] из таблицы значений и объединяет их в первую таблицу. У вас будет новая таблица, подобная этой:

    Evaluation type Evaluation module   Evaluation index    Unnamed: 3  Evaluation content  Division level  Input   Weight  Level score
0   Business application security   User Management Ordinary account authentication NaN Evaluation item 1   Level 3 0   0.010490    3
1   Business application security   User Management Ordinary account authentication NaN Evaluation item 2   Level 3 1   0.010490    3
2   Business application security   User Management Ordinary account authentication NaN Evaluation item 3   Level 3 1   0.010490    3
3   Business application security   User Management Public account identity verification    NaN Evaluation item 1   Second level    0   0.006993    2
4   Business platform security  Business platform deployment    Platform equipment information record   NaN Evaluation item 1   Second level    1   0.006993    2
5   Business platform security  Business platform deployment    Facility distribution at home and abroad    NaN Evaluation item 1   Level 3 1   0.010490    3
6   Business platform security  Resource Scheduling Real-time resource monitoring   NaN Evaluation item 1   Second level    0   0.006993    2
7   Business platform security  Resource Scheduling Detection and processing of illegal information NaN Evaluation item 1   Second level    0   0.006993    2
8   Business platform security  Resource Scheduling System log retention    NaN Evaluation item 1   Level 3 0   0.010490    3

Теперь вы можете выбрать строки, где Input не равно 0:

df = df[df.Input!=0]

, а затем подсчитать общий балл:

total_score = sum(df['Level score'] * df['Weight'])

Итак, общий балл для этого примера 0.1083915, не так ли?

0 голосов
/ 14 июля 2020

Насколько я понимаю, вы можете извлечь поля

Sheet1 (DataFrame 1) -> Level Score & Weight Sheet2 (DataFrame 2) -> Input Value

и объединить оба данных фрейм в одном, и теперь вы можете выполнять свою операцию с новым фреймом данных.

дайте мне знать, нужен ли вам код для того же самого.

...