Перенос и расчет данных из одной таблицы Excel в другую Python

Дано: xlsx файл с таблицей 1 столбец - ФИО 2 столбец - наличие у ФИО атрибута A 3 столбец - наличие у ФИО атрибута B Необходимо: создать новый xlsx файл с таблицей результатов:

  • подсчитать общее количество ячеек по столбцу 1 (без учета заголовка),
  • подсчитать кол-во ФИО с атрибутом А и В,
  • подсчитать кол-во ФИО с только атрибутом А
  • подсчитать кол-во ФИО с только атрибутом В
  • подсчитать кол-во ФИО без атрибутов

Нашел как перенести данные из одного столбца таблицы в другую с помощью openpyxl:

import openpyxl
import pandas as pd
book = openpyxl.Workbook()
book.remove(book.active)
sheet = book.create_sheet('Result1')
book.save('Задание1.xlsx')
wb1 = openpyxl.load_workbook('ФИО.xlsx')
ws1 = wb1['Contracts']
wb2 = openpyxl.load_workbook('Задание1.xlsx')
ws2 = wb2['Result1']

target_cell_num = 1

for i,cell in enumerate(ws1['A']):
    ws2[f'A{target_cell_num + i}'] = cell.value

wb2.save(filename='Задание1.xlsx')

А как посчитать данные по исходным столбцам не понимаю. Направьте, пожалуйста, на верный путь


вот исходник excel: ID ФИО: 1234567890 9876543210 7894561230 6543219870 5678941230 8527419630 2058794612 3021456789 4178520369 9954786302 Атрибут A да нет нет да нет нет да нет да нет Атрибут B нет нет да да да нет нет нет да да


Ответы (1 шт):

Автор решения: splash58

Ну, наконец, автор начал давать хоть какую-то инфу

Что касается подсчетов, это можно сделать так:

import pandas as pd

df = pd.DataFrame(
{'ФИО':
['1234567890', '9876543210', '7894561230', '6543219870', '5678941230', '8527419630', '2058794612', '3021456789', '4178520369', '9954786302', ],
'АтрибутA':
['да', 'нет', 'нет', 'да', 'нет', 'нет', 'да', 'нет', 'да', 'нет'],
'АтрибутB':
['нет', 'нет', 'да', 'да', 'да', 'нет', 'нет', 'нет', 'да', 'да']})

len(df)                                                          # 10
len(df[(df['АтрибутA'] == 'да') & (df['АтрибутB'] == 'да')])     # 2
len(df[df['АтрибутA'] == 'да'])                                  # 4     
len(df[df['АтрибутB'] == 'да'])                                  # 5
len(df[(df['АтрибутA'] != 'да') & (df['АтрибутB'] != 'да')])     # 3
→ Ссылка