Я использую довольно большой фрейм данных histdf
(20M, 3).Поля Visitor_ID
, content
и time
.Фрейм данных будет использоваться для системы рекомендаций URL, где Visitor_ID
- это уникальная идентификация посетителя, контент - это посещенный URL, а время - отметка времени.
С этой структурой для каждого уникального посетителя существует несколько URL., но есть посетители, от которых следует отказаться, потому что они не будут выдавать важную информацию (то есть они посещают слишком мало URL-адресов).
Таким образом, я создал новую переменную с именем user_visits
, с количеством строк науникальное значение в histdf.Visitor_ID
, а затем я отфильтровал его по числу, превышающему 10:
user_visits = histdf.Visitor_ID.value_counts()
mask_user = user_visits > 10
mask_user
- это серия панд.Индексом является Visitor_ID, а значения являются логическими (True, если в исходном кадре данных было более 10 строк с этим Visitor_ID).
Теперь я хочу добавить новый столбец heavyuser
в histdf
сИстинные или Ложные значения от mask_user
.
До сих пор я устанавливал значения в кадре данных с использованием этого кода:
for index in histdf.index:
temp = histdf.loc[index, 'Visitor_ID']
temp2 = mask_user[temp]
histdf.set_value(index, 'heavyuser', temp2)
Это своего рода работа.Это гораздо быстрее, чем использование iterrows или других видов итераций по строкам.Тем не менее, он все еще медленный, с длительностью обработки более 1 часа.
Мне было интересно, есть ли какой-то другой вариант с лучшей производительностью.Сводка будет считывать количество строк на отдельного пользователя Visitor_ID
, если эти строки меньше порогового значения (в данном случае 10), либо поместите False в новый столбец данных, либо удалите строки в целом.
Буду признателен за любую подсказку.Спасибо.