Бинарное кодирование в обработке данных - PullRequest
0 голосов
/ 08 ноября 2018

Я хочу сделать двоичное кодирование столбца дохода для фрейма данных, который имеет две категории "<= 50k" и "> 50k" как 0 и 1 соответственно. Как мне это сделать?

Ответы [ 2 ]

0 голосов
/ 08 ноября 2018

Вы можете использовать «применить»:

df['income']=df['income'].apply(lambda x: 1 if x>50000 else 0)

Редактировать 1:

Я думаю, что это будет намного быстрее, чем мой предыдущий ответ:

df["income"] = np.where(df["col"] <50000, 0, 1)

Производительность:

%timeit df["income"] = np.where(df["col"] <50000, 0, 1)
1000 loops, best of 3: 256 µs per loop

%timeit df['income']=df['col'].apply(lambda x: 1 if x>50000 else 0)
1000 loops, best of 3: 477 µs per loop

%timeit df['binary'] = (df['col'] > 50000).astype(int)
1000 loops, best of 3: 275 µs per loop
0 голосов
/ 08 ноября 2018

Создать логическую маску и преобразовать в целые числа - True с 1 с и False с 0 с:

df['binary'] = (df['col'] > 50000).astype(int)

Performance

np.random.seed(423)

df = pd.DataFrame({'col':np.random.randint(100000, size=1000)})


In [30]: %timeit df['income']=df['col'].apply(lambda x: 1 if x>50000 else 0)
762 µs ± 32.8 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

In [31]: %timeit df['binary'] = (df['col'] > 50000).astype(int)
357 µs ± 4.2 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

In [43]: %timeit df["income"] = np.where(df["col"] <50000, 0, 1)
375 µs ± 24.3 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...