我有三个形状相同的DataFrame〜(1,000,10,000)。
original
每行具有约20-100个非零值-非常稀疏input
是original
的副本,每行10个随机非零值更改为零output
完全填充了非零值我现在正尝试仅在original
和output
不同的位置(即仅在10个随机选择的位置)比较input
和output
>
首先,我仅创建original
的这些元素的df,将其他所有内容都设置为零:
maskedOriginal = original.where(original != input, other=0)
这是在几秒钟内创建的。然后,我尝试对output
做同样的事情:
maskedOutput = output.where(original != input, other=0)
但是,由于现在可以使用3个DataFrame,所以它太慢了-几分钟后我什至没有得到结果。还有其他合适的方法吗?
答案 0 :(得分:0)
将numpy.where
与DataFrame
的构造函数一起使用:
arr = original.values
maskedOriginal = pd.DataFrame(np.where(arr != input, arr, 0),
index=original.index,
columns=original.columns)