比较两个DataFrames,具体问题

时间:2017-05-30 22:43:14

标签: pandas

我读到了Andy对问题Outputting difference in two Pandas dataframes side by side - highlighting the difference

的回答

我有两个关于代码的问题,遗憾的是我还没有50个代表对答案发表评论,所以我希望我能在这里得到一些帮助。

  1. In [24]: changed = ne_stacked[ne_stacked]做了什么? 我不确定df1 = df [df]做什么,我似乎无法从熊猫文档中得到答案,有人可以向我解释一下吗?

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

1 个答案:

答案 0 :(得分:4)

问题1

FooGround是由ne_stackedpd.Series值组成的True,表示Falsedf1不相等的位置。

df2是一种过滤系列ne_stacked[boolean_array]的方法,它通过消除ne_stacked ne_stacked boolean_array的行False并保留{{1}行其中ne_stackedboolean_array

恰好True也是一个布尔数组,因此可用于过滤自身。为什么要这样做?因此,我们可以看到在过滤后索引的值是什么。

所以ne_stackedne_stacked[ne_stacked]的子集,只有ne_stacked个值。

问题2

True

np.where做了两件事,如果你只传递np.where中的条件,你得到一个np.where(df1 != df2)数组,其中第一个是所有行索引的引用,用于与tuple的第二个元素相结合,它是对所有列索引的引用。我通常像这样使用它

tuple

现在,我可以了解i, j = np.where(df1 != df2) df1中存在差异的所有元素,例如

df2

或者我可以分配给那些单元格

df.values[i, j]

或许多其他有用的东西。

你也可以使用df.values[i, j] = -99 作为if,然后使用else作为数组

np.where

要生成与np.where(df1 != df2, -99, 99) df1相同的数组,其中df2-99位于df1 != df299的所有位置。

df.where

另一方面,df.where计算布尔值的第一个参数,并将大小相等的对象返回到df,其中保留评估为True的单元格,其余的都是np.nandf.where

的第二个参数中传递的值
df1.where(df1 != df2)

或者

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

他们是一样的吗?
显然他们不是“相同的”。但你可以类似地使用它们

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

应与

相同
df1.where(df1 != df2, -99).values