Hola quiero obtener la cuenta de valores únicos de la dataframe. count_values implementa esto, sin embargo, quiero usar su salida en algún otro lugar. ¿Cómo puedo convertir .count_values salida a un pandas dataframe. aquí es un ejemplo de código:

import pandas as pd
df = pd.DataFrame({'a':[1, 1, 2, 2, 2]})
value_counts = df['a'].value_counts(dropna=True, sort=True)
print(value_counts)
print(type(value_counts))

la salida es:

2    3
1    2
Name: a, dtype: int64
<class 'pandas.core.series.Series'>

Lo que necesito es un dataframe como este:

unique_values  counts
2              3
1              2

Gracias.

InformationsquelleAutor s900n | 2017-11-06

3 Comentarios

  1. 36

    Uso rename_axis para el nombre de la columna de índice y reset_index:

    df = value_counts.rename_axis('unique_values').reset_index(name='counts')
    print (df)
       unique_values  counts
    0              2       3
    1              1       2

    O si necesita una columna DataFrame uso de la Serie.to_frame:

    df = value_counts.rename_axis('unique_values').to_frame('counts')
    print (df)
                   counts
    unique_values        
    2                   3
    1                   2
    • Para cualquier persona que quiera tener unique_values como es propio de la columna (y no en el índice), simplemente añada .reset_index(level=0, inplace=True) a la primera df = ... expresión anterior.
  2. 2

    Tengo el mismo problema, así que me proporcionan mis pensamientos aquí.

    Advertencia

    Cuando se trata de la estructura de datos de Pandas, usted tiene que conscientes de la tipo de retorno.

    Otra solución aquí

    Como @jezrael se mencionó antes, Pandas hacer los API pd.Series.to_frame.

    Paso 1

    Usted también puede ajustar el pd.Series a pd.DataFrame solo por hacer

    df_val_counts = pd.DataFrame(value_counts) # wrap pd.Series to pd.DataFrame

    A continuación, usted tiene un pd.DataFrame con el nombre de la columna 'a', y su primera columna convertirse en el índice de

    Input:  print(df_value_counts.index.values)
    Output: [2 1]
    
    Input:  print(df_value_counts.columns)
    Output: Index(['a'], dtype='object')

    Paso 2

    ¿Y ahora qué?

    Si quieres agregar nuevos nombres de columna aquí, como un pd.DataFrame, usted puede simplemente restablecer el índice por el API de reset_index().

    Y, a continuación, cambie el nombre de la columna por una lista de API df.coloumns

    df_value_counts = df_value_counts.reset_index()
    df_value_counts.columns = ['unique_values', 'counts']

    A continuación, usted tiene lo que se necesita

    Output:
    
           unique_values    counts
        0              2         3
        1              1         2

    Respuesta completa aquí

    import pandas as pd
    
    df = pd.DataFrame({'a':[1, 1, 2, 2, 2]})
    value_counts = df['a'].value_counts(dropna=True, sort=True)
    
    # solution here
    df_val_counts = pd.DataFrame(value_counts)
    df_value_counts = df_value_counts.reset_index()
    df_value_counts.columns = ['unique_values', 'counts'] # change column names
  3. 0

    Voy a tirar en mi sombrero así, esencialmente el mismo que @wy-hsu solución, pero en función de formato:

    def value_counts_df(df, col):
        """
        Returns pd.value_counts() as a DataFrame
    
        Parameters
        ----------
        df : Pandas Dataframe
            Dataframe on which to run value_counts(), must have column `col`.
        col : str
            Name of column in `df` for which to generate counts
    
        Returns
        -------
        Pandas Dataframe
            Returned dataframe will have a single column named "count" which contains the count_values()
            for each unique value of df[col]. The index name of this dataframe is `col`.
    
        Example
        -------
        >>> value_counts_df(pd.DataFrame({'a':[1, 1, 2, 2, 2]}), 'a')
           count
        a
        2      3
        1      2
        """
        df = pd.DataFrame(df[col].value_counts())
        df.index.name = col
        df.columns = ['count']
        return df

Dejar respuesta

Please enter your comment!
Please enter your name here