向量化一个函数,该函数有条件地更改列的值

时间:2019-12-15 11:28:34

标签: 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 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表达式。

2 个答案:

答案 0 :(得分:2)

使用Series.gt + Series.astype

这比apply方法更快,更高效。查询:when should I use apply

df['Age'].gt(40).astype(int)


#def decision(age):
#    if age>40:
#        return 1
#    return 0
#    
#df['AGE'].apply(decision)

答案 1 :(得分:0)

您可能希望使用numba获得类似的效果。

@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,请使用.values