2017-05-30 149 views
2

我看安迪的回答这个问题Outputting difference in two Pandas dataframes side by side - highlighting the difference比较两个DataFrames,

我有一个关于代码的两个问题,可惜我不尚未有50代表对答案进行评论,所以我希望我能得到一些帮助的具体问题这里。

  1. In [24]: changed = ne_stacked[ne_stacked]是做什么用的? 我不确定df1 = df [df]是干什么的,我似乎无法从熊猫文档得到答案,请问有人可以向我解释这一点吗?

  2. np.where(df1 != df2)pd.df.where(df1 != df2)相同。如果不是,有什么区别?

回答

3

问题1

ne_stackedpd.Series即由TrueFalse值指示其中df1df2不相等。

ne_stacked[boolean_array]是通过消除的ne_stacked的行,其中boolean_arrayFalse并保持的ne_stacked的行,其中boolean_arrayTrue过滤系列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 != df299使用np.where为IF,那么,其他数组

np.where(df1 != df2, -99, 99) 

要产生一个数组大小相同df1df2,你必须-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