Для уникальных значений в одном столбце получите общее количество уникальных значений в другом столбце. - PullRequest
0 голосов
/ 29 января 2020

У меня есть два объекта строки pyodb c, которые выглядят так:

('Emp1', 'Absent')

('Emp1', 'Absent')

('Emp1', 'Present')

('Emp2', 'Present')

('Emp2', 'Present')

('Emp2', 'Absent')

('Emp2', 'Present')

('Emp2', 'Absent')

Я бы хотел посчитать количество «Присутствующих» и «Отсутствующих» для каждого уникального сотрудника, например:

Emp1: Absent= 2, Present= 1

Emp2: Absent = 2, Present = 3

Я пытался:

new = []
for row in cursor.fetchall():
    if row[0] not in new:
    new.append(row[0])
for x in new:
    print(x, row[1].count("Present"))
    print(x, row[1].count("Absent"))

Но вернул ряд 000000

Заранее спасибо за помощь.

1 Ответ

0 голосов
/ 29 января 2020

Это должно быть примерно так:

import collections
import itertools

data = [
    ('Emp1', 'Absent'),
    ('Emp1', 'Absent'),
    ('Emp1', 'Present'),
    ('Emp2', 'Present'),
    ('Emp2', 'Present'),
    ('Emp2', 'Absent'),
    ('Emp2', 'Present'),
    ('Emp2', 'Absent'),
]
sorted_data = sorted(data, key = lambda x: (x[0], x[1])) # sort our data
employees = collections.defaultdict(dict)
# group by employee
for employee, employee_group in itertools.groupby(sorted_data, lambda item: item[0]):
    # group by category
    for category, category_group in itertools.groupby(employee_group, lambda item: item[1]):
        employees[employee][category] = sum(1 for _ in category_group)

print('employees', employees) # employees defaultdict(<class 'dict'>, {'Emp1': {'Absent': 2, 'Present': 1}, 'Emp2': {'Absent': 2, 'Present': 3}})
...