Я пытаюсь уменьшить количество уровней факторов в столбце в кадре данных pandas так, чтобы общее количество экземпляров любого фактора в виде доли всех строк столбца было ниже определенного порога (по умолчанию установлено значение 1%), будет объединен с новым фактором, помеченным «Другое». Ниже приведена функция, которую я использую для выполнения sh этой задачи:
def condenseMe(df, column_name, threshold = 0.01, newLabel = "Other"):
valDict = dict(df[column_name].value_counts() / len(df[column_name]))
toCondense = [v for v in valDict.keys() if valDict[v] < threshold]
if 'Missing' in toCondense:
toCondense.remove('Missing')
df[column_name] = df[column_name].apply(lambda x: newLabel if x in toCondense else x)
Проблема, с которой я сталкиваюсь, заключается в том, что я работаю с большим набором данных (~ 18 миллионов строк) и пытаюсь использовать это функция на столбце с более чем 10000 уровней. Из-за этого выполнение этой функции в этом столбце занимает очень много времени. Есть ли еще Pythoni c способ уменьшить количество уровней факторов, которые будут выполняться быстрее? Любая помощь будет высоко ценится!