Interpreting DataFrame.where() documentation
I assumed "where" meant "where condition is true, replace with X", but it's actually "Where this condition is true, KEEP the value".  This is odd to me but I found a different documentation page that more clearly explained the .where() method. 

As it turns out, the .mask() method would return what I expected from .where().  Specifically:

df.mask(lambda x: x &gt; 4, lambda x: x + 10)