Ускорение работы алгоритма по нахождению самых прибыльных заказчиков в файле

Нужно найти самых прибыльных заказчиков (заказчика). Вывести в таблице ФИО заказчиков (заказчика) и сумму всех заказов по данному ФИО.

def zapit1():  # самые прибыльные заказчики
    with open('python.csv', 'rb') as f:
        o = len(f.readlines())
        indx = [0]
        povtori = {}
        cena = 0
        f.seek(0)
        while f.readline().decode():
            indx.append(f.tell())
        for i in range(o):
            f.seek(indx[i])
            a = f.readline().decode().split(',')
            for j in range(o):
                f.seek(indx[j])
                b = f.readline().decode().split(',')
                if a[1] == b[1] and i != j:
                    povtori.setdefault(a[1])
        povtori = dict(povtori)
        print('╔════════════════════╦════════════════════╗')
        print('║        ПІБ         ║ Вартість замовлень ║')
        print('║     замовника      ║        (грн)       ║')
        print('╠════════════════════╬════════════════════╣')
        if len(povtori) == 0:
            f.seek(0)
            for i in range(o):
                a = f.readline().decode().split(',')
                if int(a[6]) >= cena:
                    cena = int(a[6])
            f.seek(0)
            for i in range(o):
                a = f.readline().decode().split(',')
                if int(a[6]) == cena:
                    print('║%-20s║%-20i║' % (a[1], int(a[6])))
        else:
            for i in povtori.keys():
                f.seek(0)
                cena = 0
                for j in range(o):
                    a = f.readline().decode().split(',')
                    if i == a[1]:
                        cena += int(a[6])
                povtori[i] = cena
            maxsimum = 0
            for i in povtori.keys():
                if povtori[i] > maxsimum:
                    maxsimum = povtori[i]
            for i in povtori.keys():
                if povtori[i] == maxsimum:
                    print('║%-20s║%-20i║' % (i, povtori[i]))
        print('╚════════════════════╩════════════════════╝')

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

Автор решения: Катунин Дмитрий

Решение:

def zapit1():  # самые прибыльные заказчики
    start_time = datetime.now()
    a = pd.read_csv('python.csv', delimiter=',',
                    names=['ПІБ Виконавця', 'ПІБ Замовник', 'Тип сайту', 'Дата замовлення', 'Кінцева дата виконання',
                           'Знижка', 'Вартість', 'Термін виконання'])
    a = a.set_index(np.arange(1, len(a)+1))
    pd.set_option('display.max_rows', None)
    pd.set_option('display.max_columns', None)
    pd.set_option('display.max_colwidth', None)
    pd.options.display.expand_frame_repr = False
    b = a[a.duplicated(subset=['ПІБ Замовник'], keep=False)]
    if len(b) == 0:
        fil = a['Вартість'] == a.Вартість.max()
        print(a.loc[fil])
    else:
        b = b.groupby('ПІБ Замовник', as_index=False)['Вартість'].sum()
        b = b.set_index(np.arange(1, len(b) + 1))
        fil = b['Вартість'] == b.Вартість.max()
        print(b.loc[fil])
    print(datetime.now() - start_time)
→ Ссылка