选择 Pandas 中的第一个 Truthy 列

问题描述 投票:0回答:1

我正在努力优化一些代码以提高速度,并且我知道 Pandas 中的 .apply 并不是数据处理的最佳方法。我正在寻求以某种方式优化这段代码。

假设你有两列这样的

设置_一 套装_二
'Foo' ''
'' ‘酒吧’
'Foo' ‘酒吧’

如果我想要 apply 语句中两列的第一个真值,我可以使用

df.apply(lambda x : x.Set_One or x.Set_Two)

这会导致

结果
'Foo'
‘酒吧’
'Foo'

但是随着数据集变大,速度会变慢。考虑到这是一个相当简单的比较,并没有太多。

如果我能做到

result = df['Set_One'] or df['Set_Two']
,那么很好的解决方案是,但一系列的真值是不明确的。使用
&
|
运算符不考虑真实性(或在字符串上工作)。

此比较的最佳实践是什么?

到目前为止,我只尝试了一个向量化函数,它在功能上只是返回第一个真值。

def return_truthy(val1, val2):
    return val1 or val2

vec_truthy = np.vectorize(return_truthy)

vec_truthy(df['Set_One'], df['Set_Two'])

使用此功能确实可以将速度提高约 10 倍,但看起来并不那么优雅

python pandas dataframe numpy vectorization
1个回答
0
投票

您可以使用

numpy.logical_or
函数来完成此操作。

import pandas as pd
import numpy as np

df = pd.DataFrame({"Set_One":["Foo", "", "Foo"], 
                   "Set_Two":["", "Bar", "Bar"]})
print(np.logical_or(df["Set_One"], df["Set_Two"]))

输出:

0    Foo
1    Bar
2    Foo
dtype: object
© www.soinside.com 2019 - 2024. All rights reserved.