Ускорение работы алгоритма по нахождению самых прибыльных заказчиков в файле
Нужно найти самых прибыльных заказчиков (заказчика). Вывести в таблице ФИО заказчиков (заказчика) и сумму всех заказов по данному ФИО.
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)