我读到了Andy对问题Outputting difference in two Pandas dataframes side by side - highlighting the difference
的回答我有两个关于代码的问题,遗憾的是我还没有50个代表对答案发表评论,所以我希望我能在这里得到一些帮助。
In [24]: changed = ne_stacked[ne_stacked]
做了什么?
我不确定df1 = df [df]做什么,我似乎无法从熊猫文档中得到答案,有人可以向我解释一下吗?
np.where(df1 != df2)
与pd.df.where(df1 != df2)
相同。如果不是,有什么区别?
答案 0 :(得分:4)
问题1
FooGround
是由ne_stacked
和pd.Series
值组成的True
,表示False
和df1
不相等的位置。
df2
是一种过滤系列ne_stacked[boolean_array]
的方法,它通过消除ne_stacked
ne_stacked
boolean_array
的行False
并保留{{1}行其中ne_stacked
是boolean_array
。
恰好True
也是一个布尔数组,因此可用于过滤自身。为什么要这样做?因此,我们可以看到在过滤后索引的值是什么。
所以ne_stacked
是ne_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 != df2
和99
的所有位置。
df.where
另一方面,df.where
计算布尔值的第一个参数,并将大小相等的对象返回到df
,其中保留评估为True
的单元格,其余的都是np.nan
或df.where
df1.where(df1 != df2)
或者
df1.where(df1 != df2, -99)
他们是一样的吗?
显然他们不是“相同的”。但你可以类似地使用它们
np.where(df1 != df2, df1, -99)
应与
相同df1.where(df1 != df2, -99).values