code: def mutate_if(df, predicate, fun):
      
      cols = list()
      for col in df:
          try:
              if predicate(df[col]):
                  cols.append(col)
          except:
              pass
      df[cols] = df[cols].apply(fun)
      return df
docs: Modifies columns in place if the specified predicate is true.
      Args:
          df (pandas.DataFrame): data passed in through the pipe.
          predicate: a function applied to columns that returns a boolean value
          fun: a function that will be applied to columns where predicate returns True
  
      Example:
          diamonds >> mutate_if(lambda col: min(col) < 1 and mean(col) < 4, lambda row: 2 * row) >> head(3)
             carat      cut color clarity  depth  table  price     x     y     z
          0   0.46    Ideal     E     SI2   61.5   55.0    326  3.95  3.98  4.86
          1   0.42  Premium     E     SI1   59.8   61.0    326  3.89  3.84  4.62
          2   0.46     Good     E     VS1   56.9   65.0    327  4.05  4.07  4.62
          (columns 'carat' and 'z', both having a min < 1 and mean < 4, are doubled, while the
          other rows remain as they were)