Я хочу обработать кадр данных pandas с ранговым кодированием вместо горячего кодирования.
Например, возьмем этот кадр данных pandas:
df = pd.DataFrame([[1,2],[3,2],[2,2]], columns=['colA', 'colB'])
print(df)
>> colA colB
0 1 2
1 3 0
2 2 3
Как это должно выглядеть вend:
print(df)
>> colA_0 colA_1 colA_2 colA_3 colB_0 colB_1 colB_2 colB_3
0 1 1 0 0 1 1 1 0
1 1 1 1 1 1 0 0 0
2 1 1 1 0 1 1 1 1
Это работало с небольшими фреймами данных:
def rankHotEncode(row):
newFeatures = {}
for i, v in row.iteritems():
for k in range(MULTIPLYFEATURES):
newFeatures[i + repr(k)] = 1 if v >= k else 0
return pd.Series(newFeatures)
df.apply(rankHotEncode, axis=1)
Решение не должно быть жестко закодировано и эффективно для порядка ~ 100 000 строк.Как я могу улучшить предоставленное решение, чтобы сделать его более эффективным или как это лучше всего сделать?