<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def _collate_results(self, field=None):
 """For a list of objects associated with a classification result, return the results as a DataFrame and dict of taxa info. Parameters field : {'readcount_w_children', 'readcount', 'abundance'} Which field to use for the abundance/count of a particular taxon in a sample. - 'readcount_w_children': total reads of this taxon and all its descendants - 'readcount': total reads of this taxon - 'abundance': genome size-normalized relative abundances, from shotgun sequencing Returns ------- None, but stores a result in self._cached. """

        import pandas as pd

        field = field if field else self._kwargs["field"]

        if field not in ("auto", "abundance", "readcount", "readcount_w_children"):
            raise OneCodexException("Specified field ({}) not valid.".format(field))

        # we'll fill these dicts that eventually turn into DataFrames
        df = {"classification_id": [c.id for c in self._classifications]}

        tax_info = {"tax_id": [], "name": [], "rank": [], "parent_tax_id": []}

        if field == "auto":
            field = "readcount_w_children"

        self._cached["field"] = field

        for c_idx, c in enumerate(self._classifications):
            # pulling results from mainline is the slowest part of the function
            result = c.results()["table"]

            # d contains info about a taxon in result, including name, id, counts, rank, etc.
            for d in result:
                d_tax_id = d["tax_id"]

                if d_tax_id not in tax_info["tax_id"]:
                    for k in ("tax_id", "name", "rank", "parent_tax_id"):
                        tax_info[k].append(d[k])

                    # first time we've seen this taxon, so make a vector for it
                    df[d_tax_id] = [0] * len(self._classifications)

                df[d_tax_id][c_idx] = d[field]

        # format as a Pandas DataFrame
        df = pd.DataFrame(df).set_index("classification_id").fillna(0)

        df.columns.name = "tax_id"

        tax_info = pd.DataFrame(tax_info).set_index("tax_id")

        self._cached["results"] = df
        self._cached["taxonomy"] = tax_info