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



我正在根据给定的列和条件创建一个新的伪变量。下面是我正在使用的代码。它很有效,但对于我想做的事情来说太慢了。有没有一种更快的,也许是矢量化的方法来在熊猫身上创建假人?具体来说,根据我的例子?

我在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)

编辑:这里有两个很好的答案。乍一看,它们看起来都一样快(至少在相同的数量级上),所以我只是接受了一个。如果有人想做一些更严肃的分析,我很乐意修改我的答案。

为什么不尝试np.where。它是按列向量化的操作,并且比按行应用要快得多。

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

另一个选项是:

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

最新更新