.wherefunc(func, fieldname=None, negate=False)

        Applies a function to an entire row and filters the rows based on the
        boolean output of that function.

        If you pass in the fieldname, optionally, the function will simply
        take the value at that fieldname, rather than the whole row.

def wherefunc(self, func, fieldname=None, negate=False):
        """
        .wherefunc(func, fieldname=None, negate=False)

        Applies a function to an entire row and filters the rows based on the
        boolean output of that function.

        If you pass in the fieldname, optionally, the function will simply
        take the value at that fieldname, rather than the whole row.
        """
        if fieldname is not None:
            if negate:
                return self.mask([not func(value) for value in self[fieldname]])
            else:
                return self.mask([func(value) for value in self[fieldname]])
        else:
            if negate:
                return self.mask([not func(row) for row in self])
            else:
                return self.mask([func(row) for row in self])