Python 矢量化有条件更改列值的函数

Python 矢量化有条件更改列值的函数,python,pandas,numpy,Python,Pandas,Numpy,我一直想知道如何为我的数据帧矢量化下面的函数。任何东西都可以矢量化吗 这是我的数据框: date AGE 0 28/04/2017 13:08 25 1 28/04/2017 08:58 87 2 03/05/2017 07:59 23 3 03/05/2017 08:05 45 4 04/05/2017 08:05 26 5 05/05/2017

我一直想知道如何为我的数据帧矢量化下面的函数。任何东西都可以矢量化吗

这是我的数据框:

                    date    AGE
   0    28/04/2017 13:08    25
   1    28/04/2017 08:58    87
   2    03/05/2017 07:59    23
   3    03/05/2017 08:05    45
   4    04/05/2017 08:05    26
   5    05/05/2017 08:05    10
   6    06/05/2017 08:05    56
   7    07/05/2017 08:05    39
以下是我想用于矢量化的函数:

def decision(value):
    if  value>40:
       return 1
    return 0
我不想使用np.where或任何lambda表达式。

使用+

这比
apply
方法更快、更有效。查询:

使用+

这比
apply
方法更快、更有效。查询:

您可能希望使用类似的性能

@numba.jit(nopython=True, nogil=True)
def decision(arr_in: np.array, decision_num: int) -> np.array:
    n = arr_in.shape[0]
    decision_arr = np.empty(n, dtype=numba.int64)
    for i in range(n):
        if arr_in[i] > decision_num:
           decision_arr[i] = 1
        else:
            decision_arr[i] = 0
    return decision_arr
然后创建列:

df['decision'] = decision(df['AGE'].to_numpy(), 40) 
如果熊猫年龄大于0.24,则使用。您可能希望使用熊猫进行类似的表演

@numba.jit(nopython=True, nogil=True)
def decision(arr_in: np.array, decision_num: int) -> np.array:
    n = arr_in.shape[0]
    decision_arr = np.empty(n, dtype=numba.int64)
    for i in range(n):
        if arr_in[i] > decision_num:
           decision_arr[i] = 1
        else:
            decision_arr[i] = 0
    return decision_arr
然后创建列:

df['decision'] = decision(df['AGE'].to_numpy(), 40) 


如果pandas的年龄大于0.24,则使用。为什么要求使用矢量化方法,然后说不想使用
np.where()
?这没有意义你不想直接在df列上使用
np.where()
,或者你甚至不想在函数内部使用
np.where()
,例如:
def decision(value):返回np.where(value>40,1,0)
?@roganjosh,因为我听说它效率更高,而且我从未真正矢量化过任何东西。所以这是我的开始。这句话完全让我困惑。你想对某些东西进行矢量化,却拒绝使用矢量化方法。我想使用np.vectorize@roganjosh为什么你要求使用矢量化方法,然后说你不想使用
np.where()
?这没有意义你不想直接在df列上使用
np.where()
,或者你甚至不想在函数内部使用
np.where()
,例如:
def decision(value):返回np.where(value>40,1,0)
?@roganjosh,因为我听说它效率更高,而且我从未真正矢量化过任何东西。所以这是我的开始。这句话完全让我困惑。你想要向量化一些东西,你拒绝了向量化的方法。我想使用np.vectorize@roganjosh为了正确,我删除了我的答案,但是我认为你应该扩展解释解决方案,而不仅仅是键入“use:This…”,这不会给操作系统带来太多的想法。这段代码是自解释的,知道何时使用Apple(检查编辑)可能会很有趣,我认为在这里使用这个方法是错误的。另一方面,我不认为有理由否定你的答案,先生,实际上我是第一个对你的答案投赞成票的人。我只是说,从这个问题上我推断,发布它的人几乎不知道pandas的任何功能,也不知道pandas中的矢量化是如何工作的。@ansev。谢谢,但我以前用过申请,我正在努力逃避申请。有没有一种方法可以使用np.vectorize创建一个新列。您计划应用的函数是您所展示的函数,还是更复杂?我不明白为什么不使用我提出的解决方案。您能更明确地解释您的问题吗?为了正确起见,我删除了我的答案,但是我认为您应该扩展解释解决方案,而不仅仅是键入“use:This…”,这不会给操作系统带来太多的想法。这段代码是自解释的,知道何时使用apply(检查编辑)可能会很有趣我认为使用此法是错误的。另一方面,我不认为有理由否定你的答案,先生,实际上我是第一个对你的答案投赞成票的人。我只是说,从这个问题上我推断,发布它的人几乎不知道pandas的任何功能,也不知道pandas中的矢量化是如何工作的。@ansev。谢谢,但我以前用过申请,我正在努力逃避申请。有没有一种方法可以使用np.vectorize创建一个新列。您计划应用的函数是您所展示的函数,还是更复杂?我不明白为什么不使用我提出的解决方案。你能更明确地解释你的问题吗?