У меня есть два кадра данных:быстрый способ для перебора двух кадров данных панда
dt1
где хранить миллионы ключа реестра записей. Определены столбцами: Index([u'count', u'id', u'is_malicious', u'key', u'name', u'value'], dtype='object')
И dt2
, где я сопоставляю данные реестра с машинами в нашей сети. Определяется с колоннами: Index([u'id', u'machine_id', 'registry_key_id'], dtype='object')
Какой самый быстрый способ для перебора всех строк в dt1
, и для каждой строки, подсчитать, сколько раз row['id']
находится в dt2
колонке row['registry_key_id']
?
псевдокод можно рассматривать как:
for row in dt1:
row['count'] = count(dt2[dt2['registry_key_id'] == row['id']]
Прямо сейчас мы используем for index, row in panda.iterrows():
, но это довольно медленно, когда дело доходит до обработки сотен тысяч строк. Мы ищем способ значительно ускорить этот процесс.
Благодарим за помощь.
Update 1:
Смотрите код ниже:
count = count.groupby('registry_key_id').count()
res = hunter.registry_keys().copy(deep=True)
res['count'] = res['id'].map(count['id'])
Мы установили, что len(count) == len(res)
и count['id']
возвращает общее число раз 'registry_key_id'
видно.
Но все значения в res['count']
: NaN
.
Не могли бы вы помочь в его устранении?
Ответ:
Использование комбинации Flab-х и ответы Yarnspinner, я был в состоянии сократить время подсчета и отображения панд от 1 часа до 12 секунд. Благодаря!
Кажется, что все работает, пока мы не назовем карту(). Возврат «count» всегда равен NaN. –
Уважаемый Yarnspinner, мы включили дополнительную информацию о нашем коде и ошибке, которую мы получаем выше. Не могли бы вы рассмотреть и помочь? Спасибо! –