df.where基于其他两个DataFrame的差异

时间:2018-07-25 11:14:26

标签: python pandas dataframe

我有三个形状相同的DataFrame〜(1,000,10,000)。

  • original每行具有约20-100个非零值-非常稀疏
  • inputoriginal的副本,每行10个随机非零值更改为零
  • output完全填充了非零值

我现在正尝试仅在originaloutput不同的位置(即仅在10个随机选择的位置)比较inputoutput

首先,我仅创建original的这些元素的df,将其他所有内容都设置为零:

maskedOriginal = original.where(original != input, other=0)

这是在几秒钟内创建的。然后,我尝试对output做同样的事情:

maskedOutput = output.where(original != input, other=0)

但是,由于现在可以使用3个DataFrame,所以它太慢了-几分钟后我什至没有得到结果。还有其他合适的方法吗?

1 个答案:

答案 0 :(得分:0)

numpy.whereDataFrame的构造函数一起使用:

arr = original.values
maskedOriginal = pd.DataFrame(np.where(arr != input, arr, 0), 
                              index=original.index,
                              columns=original.columns)