我正在优化一些代码以提高速度,我明白Pandas中的.apply不是数据处理的最佳方法。我希望以某种方式优化这段代码。
假设你有两个这样的柱子
| 第一套|设置_二|
| --|--|
| 'Foo'|“的一声|
| “的一声|“酒吧”|
| 'Foo'|“酒吧”|
如果我想在apply语句中获得两列中的第一个truthy值,我可以只使用df.apply(lambda x : x.Set_One or x.Set_Two)
这将导致
| 结果|
| --|
| 'Foo'|
| “酒吧”|
| 'Foo'|
但随着数据集的扩大,这种速度会减慢。考虑到这是一个相当简单的比较,没有太多。
一个很好的解决方案是,如果我可以做result = df['Set_One'] or df['Set_Two']
,但一个序列的真值是模糊的。使用&
或|
运算符并不考虑真实性(或者在字符串上工作)。
这种比较的最佳做法是什么?
到目前为止,我只尝试了一个向量化函数,它在功能上只返回第一个truthy值。
def return_truthy(val1, val2):
return val1 or val2
vec_truthy = np.vectorize(return_truthy)
vec_truthy(df['Set_One'], df['Set_Two'])
使用这个函数确实会导致大约10倍的速度提高,但它看起来并不优雅。
2条答案
按热度按时间s4chpxco1#
您可以使用
numpy.logical_or
函数来执行此操作。输出量:
cbwuti442#
jared上面说的是我认为最好的方法,我只是想补充一下,这也解决了问题中提到的速度问题。使用以下速度测试
我得到以下结果