В моем наборе данных у меня много столбцов со смешанными категориальными и числовыми значениями. В основном, когда числовое значение было недоступно, присваивается код, например «M», «C» и т. Д. c .., связанный с причиной, по которой он пропал.
Они имеют особое значение и своеобразное поведение, поэтому я хочу назвать их категоричными, а остальное - цифрой c. Минимальный пример:
# Original df
ex1 = ['a', 'b', '0', '1', '2']
df = pd.DataFrame(ex1, columns=['CName'])
print(df)
CName
0 a
1 b
2 0
3 1
4 2
## What I want to achieve
df['CName_a'] = (df.CName == 'a').astype(int)
df['CName_b'] = (df.CName == 'b').astype(int)
ff = (df.CName == 'b') | (df.CName == 'a')
df['CNname_num'] = np.where(ff, np.NaN, df.CName)
df2 = df.drop('CName', axis=1)
print(df2)
CName_a CName_b CNname_num
0 1 0 NaN
1 0 1 NaN
2 0 0 0
3 0 0 1
4 0 0 2
Вопрос 1 .
Q1: Как это можно сделать эффективно? В идеале мне нужно связать его в конвейер, что-то вроде fit_transform? Я должен написать с нуля, или из обычных библиотек есть хак для горячего кодирования подмножества столбцов, например ['a', 'b', 'else']?
Вопрос 2 .
Q2: Как мне заполнить 'Nan' для CName_num? Категориальные элементы (в данном примере «a» и «b») имеют поведение, которое отличается от среднего числового значения (фактически от любого числового значения). Я чувствую, что присвоить 0 или «среднее» не правильный выбор, но у меня закончились варианты. Я планирую использовать случайный лес, DNN или даже регрессионное обучение, если оно работает достойно.