def filter_by_abundance(data, abundance_column, high, low,
                        taxonomy_column='Genus'):
    """
    Return only rows where the specified taxonomy_column's set of rows have at
    least one value of abundance_column in range(low, high)

    :param data: dataframe to filter
    :param abundance_column: column to filter by.  Genus?
    :param taxonomy_column: column to grab unique values from.  Defaults to
    'Genus' for historical reasons.
    :param high: highest abundance to look for
    :param low: lowest abundance to look for
    :return: dataframe
    """
    # get a list of the taxonomy_column names that meet our criteria.
    tax_column_values_to_keep = \
        data[(data[abundance_column] <= high) &
             (data[abundance_column] >= low)][taxonomy_column].unique()
    print(tax_column_values_to_keep[0:5])
    # Return ALL rows for a taxonomy_column label if any of the rows had an
    # abundance value in the desired range.
    return data[data[taxonomy_column].isin(tax_column_values_to_keep)]