问题现状:数据量60w条的dataframe,需要进行一些条件判断和计算,一般为满足某条件的则进行加减乘除计算,不满足的则为0,比如:
result_frame['aaa'] = np.vectorize(lambda x, y: 0 if y == 0 else x / y)(
base_frame['bbb'], base_frame['ccc'])
但是不知道为什么,使用这种方法进行计算时,有一些数据明明手动计算出来是有数值 ,但是上述代码计算出来是0,这块研究了下大概是向量偏移的问题,后来也没有深究就直接换方法处理了。
解决历程:
1.使用apply方法,好处是算出来的结果和手动计算是一致的,但是apply方法相当于是逐行进行计算的,导致计算时间大打折扣,计算完大概需要15分钟
ps: 最后的axis不要忘记写了,否则会报错
result_frame['aaa'] = base_frame.apply(lambda row: 0 if row['ccc'] == 0 else row['bbb'] / row['ccc'], axis=1)
2.为了解决代码执行效率问题,apply方法注定要被抛弃,后来有发现有一个方法可以实现if相同的效果:where语句,上述代码可以修改成:
result_frame['aaa'] = (b