Pandas优化创建虚拟变量的方法?

时间:2015-07-01 21:05:12

标签: python optimization pandas dummy-variable

我正在根据给定的列和条件创建一个新的虚拟变量。以下是我正在使用的代码。它有效,但对我想做的事情来说太慢了。是否有更快,可能是矢量化的方式在熊猫中创造假人?具体来说,根据我的例子?

我已经查看了pandas中的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 个答案:

答案 0 :(得分:2)

为什么不试试np.where。它是逐列向量化的操作,它比行方式快得多。

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

答案 1 :(得分:2)

另一种选择是:

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