code: def filter_column_isin(
      df: pd.DataFrame,
      column_name: Hashable,
      iterable: Iterable,
      complement: bool = False,
  ) -> pd.DataFrame:
      """Filter a dataframe for values in a column that exist in the given iterable.
  
      This method does not mutate the original DataFrame.
  
      Assumes exact matching; fuzzy matching not implemented.
  
      Examples:
          Filter the dataframe to retain rows for which `names`
          are exactly `James` or `John`.
  
          >>> import pandas as pd
          >>> import janitor
          >>> df = pd.DataFrame({"names": ["Jane", "Jeremy", "John"], "foo": list("xyz")})
          >>> df
              names foo
          0    Jane   x
          1  Jeremy   y
          2    John   z
          >>> df.filter_column_isin(column_name="names", iterable=["James", "John"])
            names foo
          2  John   z
  
          This is the method-chaining alternative to:
  
          ```python
          df = df[df["names"].isin(["James", "John"])]
          ```
  
          If `complement=True`, then we will only get rows for which the names
          are neither `James` nor `John`.
  
      Args:
          df: A pandas DataFrame.
          column_name: The column on which to filter.
          iterable: An iterable. Could be a list, tuple, another pandas
              Series.
          complement: Whether to return the complement of the selection or
              not.
  
      Raises:
          ValueError: If `iterable` does not have a length of `1`
              or greater.
  
      Returns:
          A filtered pandas DataFrame.
      """  # noqa: E501
      if len(iterable) == 0:
          raise ValueError(
              "`iterable` kwarg must be given an iterable of length 1 "
              "or greater."
          )
      criteria = df[column_name].isin(iterable)
  
      if complement:
          return df[~criteria]
      return df[criteria]
  
file_path: pyjanitor/janitor/functions/filter.py
imports: import datetime
  import warnings
  from functools import reduce
  from typing import Any, Dict, Hashable, Iterable, List, Optional
  import numpy
  import pandas
  import pandas_flavor
  from janitor.utils import deprecated_alias, find_stack_level, refactored_function
label_desc: Use image node_id 4 for calling a global function with example usage: filter_column_isin(df, column_name, iterable, complement) and returns: df, df