Я работаю над проблемой соответствия, когда я должен назначать учеников в школы. Проблема в том, что я должен учитывать братьев и сестер для каждого учащегося, так как это важная функция во время установления приоритетов для каждой школы.
Мои данные выглядят так, как показано ниже.
Index Student_ID Brothers
0 92713846 [79732346]
1 69095898 [83462239]
2 67668672 [75788479, 56655021, 75869616]
3 83396441 []
4 65657616 [52821691]
5 62399116 []
6 78570850 [62046889, 63029349]
7 69185379 [70285250, 78819847, 78330994]
8 66874272 []
9 78624173 [73902609, 99802441, 95706649]
10 97134369 []
11 77358607 [52492909, 59830215, 71251829]
12 56314554 [54345813, 71451741]
13 97724180 [64626337]
14 73480196 [84454182, 90435785]
15 70717221 [60965551, 98620966, 70969443]
16 60942420 [54370313, 63581164, 72976764]
17 81882157 [78787923]
18 73387623 [87909970, 57105395]
19 59115621 [62494654]
20 54650043 [69308874, 88206688]
21 53368352 [63191962, 53031183]
22 76024585 [61392497]
23 84337377 [58419239, 96762668]
24 50099636 [80373936, 54314342]
25 62184397 [89185875, 84892080, 53223034]
26 85704767 [85509773, 81710287, 78387716]
27 85585603 [66254198, 87569015, 52455599]
28 82964119 [76360309, 76069982]
29 53776152 [92585971, 74907523]
...
6204 rows × 2 columns
Student_ID
- это уникальный идентификатор для каждого учащегося, а Brothers
- это список со всеми идентификаторами, которые являются братьями и сестрами этого учащегося.
Чтобы сохранить свои данные для сопоставления, я создаю класс Student. где я сохраняю все атрибуты, которые мне нужны для сопоставления. Вот ссылка для загрузки всего набора данных .
class Student():
def __init__(self, index, id, vbrothers = []):
self.__index = index
self.__id = id
self.__vbrothers = vbrothers
@property
def index(self):
return self.__index
@property
def id(self):
return self.__id
@property
def vbrothers(self):
return self.__vbrothers
Я создаю экземпляр объекта класса Student, выполняя al oop на всех строках моего кадра данных, затем добавляя каждый один в списке:
students = []
for index, row in students_data.iterrows():
student = Student(index, row['Student_ID'], row['Brothers'])
students.append(student)
Теперь моя проблема в том, что мне нужен указатель на индекс каждого брата в списке students
. На самом деле, я реализую этот вложенный l oop:
for student in students:
student.vbrothers_index = [brother.index for brother in students if (student.id in brother.vbrothers)]
Это раздел с худшей производительностью из всего моего кода. Это в 4 раза медленнее, чем второй худший раздел.
Любые предложения о том, как улучшить производительность этого вложенного l oop, приветствуются.