if (!(Array.isArray(other))
      && !(other instanceof Immutable.List)
      && !(other instanceof Series)
      && !(other instanceof DataFrame)) {
      // noinspection Eslint
      return new DataFrame(Immutable.Map(this._data.mapEntries(([k, v]) => {
        return [k, v.where(other, op)];
      })));
    }
Return an object of same shape as self and whose corresponding entries are from self
where cond is True and otherwise are from other.

pandas equivalent [DataFrame.where](http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.where.html)

@param {Array|List|Series|DataFrame|number|string} other
 Iterable or value to compare to DataFrame
@param {function} op
 Function which takes (a, b) values and returns a boolean

@returns {DataFrame}

@example
const df = new DataFrame([{x: 1, y: 2}, {x: 2, y: 3}]);

// Returns DataFrame(Map({x: Series([true, false]), y: Series([false, true])})
df.where(new Series([1, 3]), (a, b) => a === b);

// Returns DataFrame(Map({x: Series([true, false]), y: Series([false, true])})
df.where(new DataFrame(Map({
   a: new Series([1, 1]),
   b: new Series([3, 3])})),
   (a, b) => a === b);