Tengo un Pandas dataframe y quiero encontrar todos los valores únicos que dataframe…independientemente de filas y columnas. Si tengo una de 10 x 10 dataframe, y supongo que tiene 84 valores únicos, necesito encontrar – No la cuentan.

Puedo crear un conjunto y sumar los valores de cada una de las filas por la iteración sobre las filas de la dataframe. Pero, yo creo que puede ser ineficiente (no se puede justificar que). ¿Hay una manera eficaz de encontrar? Hay una función predefinida?

InformationsquelleAutor user1717931 | 2013-11-19

2 Comentarios

  1. 74
    In [1]: df = DataFrame(np.random.randint(0,10,size=100).reshape(10,10))
    In [2]: df
    Out[2]: 
    0  1  2  3  4  5  6  7  8  9
    0  2  2  3  2  6  1  9  9  3  3
    1  1  2  5  8  5  2  5  0  6  3
    2  0  7  0  7  5  5  9  1  0  3
    3  5  3  2  3  7  6  8  3  8  4
    4  8  0  2  2  3  9  7  1  2  7
    5  3  2  8  5  6  4  3  7  0  8
    6  4  2  6  5  3  3  4  5  3  2
    7  7  6  0  6  6  7  1  7  5  1
    8  7  4  3  1  0  6  9  7  7  3
    9  5  3  4  5  2  0  8  6  4  7
    In [13]: Series(df.values.ravel()).unique()
    Out[13]: array([9, 1, 4, 6, 0, 7, 5, 8, 3, 2])

    Numpy único tipo, por lo que su más rápido que hacerlo de esta manera (y, a continuación, ordenar si usted necesita)

    In [14]: df = DataFrame(np.random.randint(0,10,size=10000).reshape(100,100))
    In [15]: %timeit Series(df.values.ravel()).unique()
    10000 loops, best of 3: 137 s per loop
    In [16]: %timeit np.unique(df.values.ravel())
    1000 loops, best of 3: 270 s per loop
    • Para matrices más grandes es más rápido utilizar la ep.la única que no ordenar.
    • yep….eso es correcto…la edición
    • Aún mejor es pd.unique(df.values.ravel()), que evita la creación de la Serie 🙂
    • Muchas gracias @Andy y Jeff. El aprendizaje de los Pandas, Scipy/Numpy muy rápido…con la ayuda de un experto desde ENTONCES !
    • Tengo una muy grande df con valores de fecha y el siguiente flujo de trabajo es significativamente más rápido para mí cols = df.columns; df['dummy'] = 0.0; df.groupby(cols)[['dummy']].size().reset_index().drop('dummy',axis=1)
  2. 7

    O puede utilizar:

    df.stack().unique()

    Entonces usted no necesita preocuparse si usted tiene NaN valores, ya que son excluidas en el momento de hacer el apilado.

    • ¿Cómo puedo convertir esa vuelta a un dataframe, si la forma de la matriz no coincide con el antiguo dataframe….

Dejar respuesta

Please enter your comment!
Please enter your name here