title: Using np.where but maintaining exisitng values if condition is False
body: <p>I like np.where, but have never fully got to grip with it. </p>
  
  <p>I have a dataframe lets say it looks like this:</p>
  
  <pre><code>import pandas as pd
  import numpy as np
  from numpy import nan as NA
  DF = pd.DataFrame({'a' : [ 3, 0, 1, 0, 1, 14, 2, 0, 0, 0, 0],
                     'b' : [ 3, 0, 1, 0, 1, 14, 2, 0, 0, 0, 0],
                     'c' : [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
                     'd' : [5, 1, 2 ,1, 1 ,22, 30, 1, 0, 0, 0]})
  </code></pre>
  
  <p>Now what I want to do is replace the 0 values with NaN values when all row values are zero. Critically I want to maintain whatever other values are in the row in the cases where all row values are not zero.</p>
  
  <p>I want to do something like this:</p>
  
  <pre><code>cols = ['a', 'b', 'c', 'd']
  condition = (DF[cols] == 0).all(axis=1)
  for col in cols:
      DF[col] = np.where(condition, NA, ???)
  </code></pre>
  
  <p>I put the ??? to indicate that I do not know what value to place there if the condition is False, I just want to preserve whatever is there already. Is this possible with np.where, or should I use another technique?</p>