在熊猫中乘以float列会花费太多时间

时间:2019-06-11 09:10:51

标签: python pandas optimization floating-accuracy

所有人都在哭泣, 我有460.000行的DataFrame,有15列。我正在尝试将另一两列的乘积分配给一个列 代码是这样的

df[df.colx == 'S']['prd'] = df['col1']*df['col2']

prd,col1和col2具有float64作为数据类型。 我在其他列上执行了很多操作,没有任何问题,包括日期差,它们几乎立即执行。 如果我尝试

df['prd'] =  df['col1']*df['col2']

执行速度非常快。当我尝试将操作应用于DataFrame的子集时会出现问题 有人可以帮助我,并解释如何减少执行时间? 非常感谢你!

更新: 如果可以的话

df2 = pd.DataFrame(df[df.colx=='S'])

然后

df2['prd'] =  df['col1']*df['col2']

仍然超级慢......... 哦,有可能吗? df2应该是一个新的DataFrame...。

1 个答案:

答案 0 :(得分:1)

尝试分开操作:

df2 = df[df.colx == 'S']
df2['prd'] = df2['col1]*df2['col2']

或者如果df.colx == 'S'对您来说是某种情况,则可以运行:

df['prd'] = numpy.where(df['prod'] == 'S', df['col1']*df['col2'], 'Do something else')

只需用另一种逻辑方法替换“执行其他操作”即可,如果df.colx != 'S'