 <p>There is no built in method in pandas I can think of, you would have to save the original df prior to the update and then compare, the trick is to ensure that <code>NaN</code> comparisons are treated the same as non-zero values, here df3 is a copy of df prior to the call to update:</p> <pre><code>In [104]: df.update(df2) df Out[104]: A B C D E axis1 A NaN NaN NaN NaN 1 Apple 1 NaN NaN 1 1 Linux 1 1 1 NaN 1 Unix 1 1 NaN 1 1 Window 1 NaN 1 NaN NaN [5 rows x 5 columns] In [105]: df3 Out[105]: A B C D E axis1 A NaN NaN NaN NaN NaN Apple 1 NaN NaN 1 NaN Linux 1 1 1 NaN NaN Unix 1 1 NaN 1 NaN Window NaN NaN 1 NaN NaN [5 rows x 5 columns] In [106]: # compare but notice that NaN comparison returns True df!=df3 Out[106]: A B C D E axis1 A True True True True True Apple False True True False True Linux False False False True True Unix False False True False True Window True True False True True [5 rows x 5 columns] In [107]: # use numpy count_non_zero for easy counting, note this gives wrong result np.count_nonzero(df!=df3) Out[107]: 16 In [132]: ~((df == df3) | (np.isnan(df) &amp; np.isnan(df3))) Out[132]: A B C D E axis1 A False False False False True Apple False False False False True Linux False False False False True Unix False False False False True Window True False False False False [5 rows x 5 columns] In [133]: np.count_nonzero(~((df == df3) | (np.isnan(df) &amp; np.isnan(df3)))) Out[133]: 5 </code></pre>