Вычислите среднее значение по строке, затем запишите результат в другую ячейку листа, если некоторые данные совпадают

#python #python-2.7 #openpyxl

#python #python-2.7 #openpyxl

Вопрос:

У меня есть файл Excel с 2 листами. На первом листе у меня 100 столбцов х 23 строки. Первый столбец содержит имена, а остальные 99 столбцов содержат числа. На втором листе у меня есть первый столбец с именами. Я хочу добавить на второй лист среднее значение столбца 99 с первого листа, если имена совпадают. Это то, что я пробовал до сих пор:

 wb = openpyxl.load_workbook(".xlsx")
ws1 = wb.get_sheet_by_name('sheet1')
ws2 = wb.get_sheet_by_name('sheet2')

for counter1 in range(39,62):   #counter to parse second sheet
    for counter2 in range(36, 62):#counter to parse first sheet
        if ws1.cell(row=counter1, column=1).value == ws2.cell(row=counter2, column=1).value:   # check if column1 from first sheet matches column 1 from second sheet
            ws1.cell(row=counter1,column=19).value = ...
  

я не знаю, как вычислить среднее значение по 99 столбцам, чтобы добавить его сюда.
Я пробовал mean(ws2.cell(строка = counter2, столбец = 2).значение),
но я получил эту ошибку:
Ошибка типа: не удается преобразовать тип «unicode» в числитель / обозначитель

Приветствуется любая помощь

Комментарии:

1. Почему вложенный цикл? Почему вы больше не используете openpyxl API? Почему вы не используете встроенную sum() функцию Python?

Ответ №1:

 wb = openpyxl.load_workbook(".xlsx")
ws1 = wb.get_sheet_by_name('sheet1')
ws2 = wb.get_sheet_by_name('sheet2')

for counter1 in range(39,62):   #counter to parse second sheet
    for counter2 in range(36, 62):#counter to parse first sheet
        if ws1.cell(row=counter1, column=1).value == ws2.cell(row=counter2, column=1).value:   # check if column1 from first sheet matches column 1 from second sheet
            summ = 0.0
            for col in range(2,101):
                summ  = float(ws1.cell(row = counter2, column = col).value)
            average = summ/99
            ws1.cell(row=counter1,column=19).value = average
  

Итак, я бы сам рассчитал средние значения, суммируя значения столбцов и деля сумму на количество столбцов.

Однако вы уверены, что счетчик 1 относится ко ВТОРОМУ листу, а счетчик 2 — к первому листу? Название предполагает возможную логическую ошибку. Кроме того, почему второй диапазон от 36 до 62, а не, как первый диапазон, от 39 до 62?