Pandas 如何优化这些功能?

Pandas 如何优化这些功能?,pandas,lambda,apply,Pandas,Lambda,Apply,即使是简单的更改,这3个代码也需要很多时间。 我想,访问每行3次会导致效率低下。 所以,如果我可以对行进行1次访问并应用函数更改3数据,那么速度可以比现在快2~3倍 像 train["gender"] = train.apply(lambda x: 1 if x["gender"] == "F" else 0, axis=1) train["car"] = train.apply(lambda x: 1 if x[

即使是简单的更改,这3个代码也需要很多时间。
我想,访问每行3次会导致效率低下。 所以,如果我可以对行进行1次访问并应用函数更改3数据,那么速度可以比现在快2~3倍

train["gender"] = train.apply(lambda x: 1 if x["gender"] == "F" else 0, axis=1) 
train["car"] = train.apply(lambda x: 1 if x["car"] == "Y" else 0, axis=1) 
train["reality"] = train.apply(lambda x: 1 if x["reality"] == "Y" else 0, axis=1) 
如何优化这些代码

=========================== tdy测试结果

您可以尝试3倍,即:

train['gender']=np.where(train.gender==F',1,0)
train['car']=np.where(train.car='Y',1,0)
train['reality']=np.where(train.reality=='Y',1,0)
或者是稍微慢一点的2倍:

train['gender']=np.where(train.gender==F',1,0)
列车[['car','reality']]=np.where(列车[['car','reality']]]='Y',1,0)
1000万行的计时:

方法
%timeit
3x
np.where()
每个回路152 ms±8.86 ms(7次运行的平均值±标准偏差,每个回路1次) 2x
np.where()
每个回路198 ms±39.3 ms(7次运行的平均值±标准偏差,每个回路1次) 3x
apply()
每个回路8.91 s±495 ms(7次运行的平均值±标准偏差,每个回路1次)
哦,我试试这个。但我认为这个解决方案也有同样的问题。访问每一行3times@LaserCho我编辑了答案,将
car
reality
结合起来。我不知道有什么方法可以同时包含所有3个,因为
gender
有不同的条件。非常有趣。你最初的答案“np.where 3次”是最快的。第二个是当前的答案。我原来的3次申请是最慢的。最快的方式比秒快近16倍。第二个当前答案比我的代码快35倍。@LaserCho我添加了另一个选项,可以一次完成所有任务,但我不确定它是否真的快。请注意,其中有些错误我还没有弄清楚。
# it is my imaginary code. not works
train[["gender","car", "reality"]] =  train.apply(lambda x: 1 if x["gender"] == "F" else 0, axis=1,
                                                  lambda y: 1 if y["car"] == "Y" else 0, axis=1,
                                                  lambda z: 1 if z["reality"] == "Y" else 0, axis=1)