我有一个函数computeLeft
,它接收一个索引并返回四个数字。像这样的东西:
def computeLeft(i):
return np.array([i*2, i*3, i*4, i*5])
# edited to correct it
现在在我的代码中我这样使用它:
import numpy as np
import pandas as pd
results=["val1","val2","val3","val4"]
df[results] = np.vectorize(computeLeft, signature="()->(4)")(range(len(df)))
哪里df
有一些数据框。
这显然将该函数应用于 的所有行df
。我想将此函数仅应用于 的某些索引df
。
例如我有一个清单[2, 5, 7, 8, 10]
。我只想计算computeLeft
列表中的索引,并且结果中的列仅具有这些行的值(其余行具有 Nan)。
我怎样才能有computeLeft
选择性地申请呢?
首先,您需要修复您的函数及其向量化:
为了实现你的目标,你可以使用
loc[]
:这假设您的数据帧具有给定整数的索引标签(给定索引不仅仅是具有不同索引标签的行号)。
如果
computeLeft
代表您的实际函数,那么您最好以矢量化方式编写它,因为np.vectorize
它很慢(它主要是一个便利函数,并不能提高速度)。在这种情况下,您可以将函数编写为:用法:
输出:
速度对比:
显然不使用的版本
np.vectorize
要快得多。