def filter_rows
      return to_enum(:filter_rows) unless block_given?

      keep_rows = @index.map { |index| yield access_row(index) }

      where keep_rows
    end
Iterates over each row and retains it in a new DataFrame if the block returns
true for that row.