问题1
ne_stacked
是pd.Series
即由True
和False
值指示其中df1
和df2
不相等。
ne_stacked[boolean_array]
是通过消除的ne_stacked
的行,其中boolean_array
是False
并保持的ne_stacked
的行,其中boolean_array
是True
过滤系列ne_stacked
一种方式。
恰巧ne_stacked
也是一个布尔数组,所以可以用来过滤自己。为什么要这样做?所以我们可以看到索引的值在我们过滤后是什么。
所以ne_stacked[ne_stacked]
是ne_stacked
的子集,只有True
的值。
问题2
np.where
np.where
做两件事情,如果你只通过有条件像np.where(df1 != df2)
,你得到阵列的tuple
,其中第一是所有的行指数的参考与tuple
的第二个元素一起使用,它是对所有列索引的引用。我通常使用这样
i, j = np.where(df1 != df2)
现在我可以在或在其中也有像
df.values[i, j]
或者我可以分配到这些细胞的差异df1
所有元素df2
得到
df.values[i, j] = -99
或许多其他有用的东西。
您也可以在所有的地方,在df1 != df2
和99
使用np.where
为IF,那么,其他数组
np.where(df1 != df2, -99, 99)
要产生一个数组大小相同df1
或df2
,你必须-99
休息。
df.where
在另一方面df.where
评估布尔值的第一参数,并返回相同大小的一个目的是df
,其中该评估以True
的细胞保持其余要么np.nan
或值在df.where
df1.where(df1 != df2)
或者
0的第二个参数传递
df1.where(df1 != df2, -99)
他们是一样的吗?
显然他们不是“相同”。但是你可以用它们同样
np.where(df1 != df2, df1, -99)
应该是相同的
df1.where(df1 != df2, -99).values