def df_down_next_matching_pos(df, pos, pred):
  """
  Given a position `pos` at `(c, r)`, reads down column `c` from row `r` to find the next
  cell whose `value` satisfies `pred(value)`.

  Returns the position of that cell if found, or `None` otherwise.
  """
  c, r0 = pos
  ir0 = df.index.get_loc(r0)
  col = df[c]
  col_slice = col.iloc[ir0+1:]
  for r, x in col_slice.iteritems():
    if pred(x):
      return c, r
  return None