2015-07-01 2 views
0

Я создаю новую фиктивную переменную, основанную на заданном столбце и критерии. Ниже приведен код, с которым я работаю. Это работает, но слишком медленно для того, что я хотел бы сделать. Есть ли более быстрый, возможно, векторизованный способ создания манекенов в пандах? В частности, согласно моему примеру?Pandas Оптимизированный способ создания Dummy-Variable?

Я искал функцию get_dummies в пандах, но, похоже, что-то немного отличается от того, что я здесь делаю. Я мог ошибаться, хотя, если у кого-то есть способ заставить get_dummies работать с этим примером, это тоже будет приемлемым ответом.

def flagger(row, criteria, col): 
    if row[col] <= criteria: 
     return 1 
    if row[col] > criteria: 
     return 0 

dstk['dropflag'] = dstk.apply(lambda row: flagger(row, criteria, col), axis=1) 

Редактировать: Здесь есть два хороших ответа. С первого взгляда они выглядят одинаково быстро (по крайней мере, до того же порядка), поэтому я просто принял их. Если кто-то захочет сделать более серьезное профилирование, я был бы счастлив пересмотреть свой выбор ответа.

ответ

2

Почему бы не попробовать np.where. Это векторная операция с использованием столбцов, и она намного быстрее, чем применяется ряд строк.

dstk['dropflag'] = np.where(dstk.col <= criteria, 1, 0) 
2

Другой вариант:

dstk['dropflag'] = (dstk[col] <= criteria).astype(int) 
+0

Просто немного опечатка .. Должно быть (DSTK [Col] <= критерии). Благодаря! – sfortney

+0

@sfortney: Спасибо за исправление. – unutbu

Смежные вопросы