【发布时间】:2019-05-07 01:25:41
【问题描述】:
我有两段代码似乎做同样的事情,但其中一段的速度几乎是另一段的一千倍。
这是第一段:
t1 = time.time()
df[new_col] = np.where(df[col] < j, val_1, val_2)
t2 = time.time()
ts.append(t2 - t1)
在ts 我有如下值:
0.0007321834564208984, 0.0002918243408203125, 0.0002799034118652344
相比之下,这部分代码:
t1 = time.time()
df['new_col'] = np.where((df[col] >= i1) & (df[col] < i2), val, df.new_col)
t2 = time.time()
ts.append(t2 - t1)
创建ts 填充以下值:
0.11008906364440918, 0.09556794166564941, 0.08580684661865234
我不知道第一次和第二次作业之间的本质区别是什么。
在这两种情况下df 应该是相同的。
添加
事实证明,本质的区别并不在我正在寻找的地方。在我拥有的代码的快速版本中:
df = inp_df.copy()
在类方法的开头(其中inp_df 是方法的输入数据框)。在慢速版本中,我是直接对输入数据框进行操作。复制输入数据框并对其进行操作后,它变得很快。
【问题讨论】:
-
尝试预先计算 where 条件,只计算对 np.where 的调用和对 df[new_col] 的赋值。你看到了什么?
标签: python pandas performance numpy