Как можно избежать циклов и сделать приведенный ниже код Python быстрее - PullRequest
0 голосов
/ 03 июля 2019

выбор: матрица логических значений. Строки относятся к уникальным значениям IP, полученным из фрейма данных материала, столбцы - к значениям UID, полученным из фрейма основных данных
selectionRows: массив уникальных значений IP материала
selectionCols: массив уникальных значений Master UID
selectionM_contraints: Список для хранения ограничений на матрицу выбора
Материал: кадр данных pandas о материалах и материалах с булевыми значениями (> 25000 строк)
Мастер: кадр данных pandas основных и основных объектов с логическими значениями (> 5000 строк)
функции: Имена столбцов, которые являются общими для фреймов материалов и основных данных, каждый столбец имеет логические значения. список функций содержит 10 или более имен столбцов.


Для всех IP-адресов во фрейме данных материала найдите UID из фрейма основных данных, которые не совпадают, и создайте ограничение, чтобы установить соответствующее значение в матрице выбора на ноль.
Например:
Material.loc [Material.IP = '500', функции]
IP Gender Stroke Temp
500 True True False


Master.loc [Master.UID = '001', функции]
UID Пол Инсульт Темп
001 True True False


Master.loc [Master.UID = '002', функции]
UID Gender Stroke Temp
002 True False False


выбор [IP = 500, UID = 002] должен быть установлен равным нулю

Мой текущий код ниже, он работает почти всегда, мне нужно найти способ его оптимизировать, скорее всего, мне нужно удалить циклы for, если это возможно

selectionM_contraints = [] 
for row in selectionRows:
    for col in selectionCols:
        if all(Material.loc[Material.IP == row, features].all() == Master.loc[Master['UID'] == col, features].all()) == False:
            selectionM_contraints.append(selection[np.where(selectionRows == row), np.where(selectionCols == col)] == 0)

Поскольку выбор [IP = 500, UID = 002] должен быть установлен равным нулю, он будет добавлен в список selectionM_contraints

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...