Pandas 创建虚拟变量的优化方法?
Pandas Optimized Way to Create Dummy-Variable?
我正在根据给定的列和条件创建一个新的虚拟变量。下面是我正在使用的代码。它有效,但对于我想做的事情来说太慢了。在 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)
我正在根据给定的列和条件创建一个新的虚拟变量。下面是我正在使用的代码。它有效,但对于我想做的事情来说太慢了。在 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)