class_docstr: Subset a pandas.DataFrame by passing a series of steps
  
  Parameters
  ----------
  *steps
      Steps to apply to the data sequentially (order matters). Each step
      must be a dictionary with a key "kind" whose value must be one of
      "column_drop", "row_drop" or "column_keep". The rest of the key-value
      pairs must match the signature for the corresponding Step objects
class_docstr_tok: ["Subset","a","pandas.DataFrame","by","passing","a","series","of","steps","Parameters","--","--","--","--","--","*","steps","Steps","to","apply","to","the","data","sequentially","(","order","matters",")",".","Each","step","must","be","a","dictionary","with","a","key","``","kind","''","whose","value","must","be","one","of","``","column_drop","''",",","``","row_drop","''","or","``","column_keep","''",".","The","rest","of","the","key-value","pairs","must","match","the","signature","for","the","corresponding","Step","objects"]
docstr: Apply steps
  
  Parameters
  ----------
  df
      Data frame to transform
  return_summary
      If False, the function only returns the output data frame,
      if True, it also returns a summary table
docstr_tok: ["Apply","steps","Parameters","--","--","--","--","--","df","Data","frame","to","transform","return_summary","If","False",",","the","function","only","returns","the","output","data","frame",",","if","True",",","it","also","returns","a","summary","table"]
code: def transform(self, df, return_summary: bool = False):
      """Apply steps
  
      Parameters
      ----------
      df
          Data frame to transform
      return_summary
          If False, the function only returns the output data frame,
          if True, it also returns a summary table
      """
      result = df
      summaries = []
  
      for i, step in enumerate(self.steps):
          try:
              result = step.transform(
                  result, return_summary=return_summary
              )
          except Exception as e:
              raise DataSelectorError(
                  "Error executing step {} ({})".format(
                      i, type(step).__name__
                  )
              ) from e
  
          if return_summary:
              result, summary = result
              summaries.append(summary)
  
      if not return_summary:
          return result
      else:
          table = Table(
              [
                  (type(step).__name__, summary)
                  for step, summary in zip(self.steps, summaries)
              ],
              header=["Step", "Summary"],
          )
          return result, table
  
imports: from copy import copy, deepcopy
  import abc
  import inspect
  import importlib
  import itertools
  from collections.abc import Mapping
  import pandas
  from decorator import decorator
  from sklearn_evaluation.exceptions import DataSelectorError
  from sklearn_evaluation.util import map_parameters_in_fn_call
  from sklearn_evaluation.table import Table
label_desc: Use image node_id 2 for calling the DataSelector obj's underlying member method code with example usage: obj.transform(df, return_summary) and returns: result, result,  table