2017-05-30 198 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