У меня есть таблица слов со смешанными категориальными классификациями. Я хочу сделать так, чтобы столбец «общего типа» имел метку классификации самого высокого уровня (режима), чтобы каждая строка имела метку.
word type common type
post | WORK_OF_ART | WORK_OF_ART
post | WORK_OF_ART | WORK_OF_ART
post | WORK_OF_ART | WORK_OF_ART
post | WORK_OF_ART | WORK_OF_ART
post | WORK_OF_ART | WORK_OF_ART
post | OTHER | WORK_OF_ART
post | WORK_OF_ART | WORK_OF_ART
post | WORK_OF_ART | WORK_OF_ART
post | OTHER | WORK_OF_ART
-----|--------------------------
sign | OTHER | OTHER
sign | WORK_OF_ART | OTHER
sign | OTHER | OTHER
sign | WORK_OF_ART | OTHER
sign | OTHER | OTHER
sign | OTHER | OTHER
sign | WORK_OF_ART | OTHER
I следующая функция, но на фрейме данных 1m + строк, время выполнения которых ужасно
def replace_most_common_type(frame, word):
common_type = frame[frame['word']==word]['type'].value_counts().idxmax()
frame.loc[frame['word']==word, 'type'] = common_type
unique_words = master_frame['word'].unique()
for idx, word in unique_words:
replace_most_common_type(master_frame, word)
встроенные pandas методы имеют тенденцию быть numpy векторизованными, поэтому любое решение, использующее собственные функции pandas, ценится