Таким образом, вы хотите только l oop через уникальных клиентов. Это может быть достигнуто с помощью набора для хранения имен клиентов, с которыми вы уже перешли, и оператора continue для пропуска повторных клиентов.
Примерно так:
customers = set()
for row in data[1:]:
name = row[0]
orderNo = row[1]
compressor = int(row[2])
evaporator = int(row[3])
value = int(row[4])
if name in customers:
continue
customers.add(name)
# Check no of Compressors and Evaporators here
# If customers have placed multiple orders, only their first one will be checked here
Редактировать В ответ на ваш комментарий, единственный способ, которым я мог бы сделать это без изменения исходного набора данных, - это создать новый набор данных с именем клиента и общим количеством заказов.
Примерно так
totalOrders= {}
for row in data[1:]:
name = row[0]
compressor = int(row[2])
evaporator = int(row[3])
if name in totalOrders:
totalOrders[name][0] += compressor
totalOrders[name][1] += evaporator
else:
totalOrders[name] = [compressor, evaporator]
Этот код создает словарь по имени клиента, значение которого представляет собой список [заказанные компрессоры, заказанные испарители]
Несколько заказов одного и того же клиента обновят только существующую запись в словаре. Тогда нужно просто пройтись по словарю и проверить, равны ли оба значения списка> 0.
Редактировать 2:
Конечно, есть способ сделать это:
totalOrders= {}
for row in data[1:]:
name = row[0]
orderNo = row[1]
compressor = int(row[2])
evaporator = int(row[3])
if name not in totalOrders:
totalOrders[name] = []
totalOrders[name].append([orderNo, compressor, evaporator])
Здесь у вас есть словарь по имени клиента со значениями, представляющими собой список списков. Я был бы осторожен с многоуровневыми структурами данных, как бы то ни было. Если они становятся слишком сложными, это может сделать ваш код почти нечитаемым и сделать небольшие изменения в коде довольно сложными. Но что-то вроде этого не должно быть большой проблемой.
Редактировать 3:
В своем первоначальном вопросе вы заявили, что хотите найти процент клиентов, которые купили как конденсатор, так и испаритель.
Это было бы на самом деле проще сделать со словарем в моем первом редактировании.
totalOrders= {}
for row in data[1:]:
name = row[0]
compressor = int(row[2])
evaporator = int(row[3])
if name in totalOrders:
totalOrders[name][0] += compressor
totalOrders[name][1] += evaporator
else:
totalOrders[name] = [compressor, evaporator]
evapCond = 0
for customer in totalOrders:
if totalOrders[customer][0] > 0 and totalOrdrs[customer][1] > 0:
evapCond += 1
percentBoth = evapCond/len(totalOrders) * 100
Здесь процентBoth - это процент клиентов, которые купили и конденсатор, и испаритель
Чтобы сделать это со словарем в моем втором редактировании, вам потребуется вложенное значение для l oop
totalOrders= {}
for row in data[1:]:
name = row[0]
orderNo = row[1]
compressor = int(row[2])
evaporator = int(row[3])
if name not in totalOrders:
totalOrders[name] = []
totalOrders[name].append([orderNo, compressor, evaporator])
evapCond = 0
for customer in totalOrders:
cond = False
evap = False
for order in totalOrders[customer]:
if totalOrders[customer][order][2] > 0:
cond = True
if totalOrders[customer][order][3] > 0:
evap = True
if cond and evap:
evapCond += 1
percentBoth = evapCond/len(totalOrders) * 100