def METHOD_NAME(self, col_selector: ColumnSelector, ddf: dd.DataFrame):
    dask_stats = {}
    ddf_dtypes = ddf.head(1)
    # For each column, calculate the stats
    for col in col_selector.names:
        dask_stats[col] = {}
        self.col_names.append(col)
        # Get dtype for all
        dtype = ddf_dtypes[col].dtype
        self.col_dtypes.append(dtype)
        # Identify column type
        if np.issubdtype(dtype, np.floating):
            col_type = "conts"
        else:
            col_type = "cats"
        self.col_types.append(col_type)
        # Get cardinality for cats
        if col_type != "conts":
            dask_stats[col]["cardinality"] = ddf[col].nunique()
        # if string, replace string for their lengths for the rest of the computations
        if dtype == "object":
            ddf[col] = ddf[col].map_partitions(lambda x: x.str.len(), meta=("x", int))
        # Add list support when cudf supports it:
        # https://github.com/rapidsai/cudf/issues/7157
        # elif col_type == "cat_mh":
        #    ddf[col] = ddf[col].map_partitions(lambda x: x.list.len())
        # Get min,max, and mean
        dask_stats[col]["min"] = ddf[col].min()
        dask_stats[col]["max"] = ddf[col].max()
        # Get Percentage of NaNs for all
        dask_stats[col]["per_nan"] = 100 * (1 - ddf[col].count() / len(ddf[col]))
    return dask_stats, _custom_moments(ddf[col_selector.names])