Me topé con los pandas y parece ideal para cálculos sencillos que me gustaría hacer. Tengo un SAS de fondo y estaba pensando que iba a reemplazar proc freq: parece que va a escalar a lo que yo quiero hacer en el futuro. Sin embargo, parece que no puedo conseguir mi cabeza alrededor de una tarea sencilla (no estoy seguro de si voy a mirar pivot/crosstab/indexing – si debo tener un Panel o DataFrames etc…). Podría alguien darme algunos consejos sobre cómo hacer lo siguiente:

Tengo dos archivos CSV (uno para el año 2010, uno para el año 2011 – simple de los datos transaccionales) – Las columnas son de la categoría y la cantidad

2010:

AB,100.00
AB,200.00
AC,150.00
AD,500.00

2011:

AB,500.00
AC,250.00
AX,900.00

Estos se cargan en distintos DataFrame objetos.

De lo que me gustaría hacer es obtener la categoría, la suma de la categoría, y la frecuencia de la categoría, por ejemplo:

2010:

AB,300.00,2
AC,150.00,1
AD,500.00,1

2011:

AB,500.00,1
AC,250.00,1
AX,900.00,1

No puedo trabajar si debo ser el uso de pivot/crosstab/groupby/an index
etc… me pueden obtener la suma o la frecuencia – me parece que no puede conseguir tanto… Se hace un poco más complejo ya que me gustaría hacerlo en un mes a mes, pero creo que si alguien sería tan amable que me apunte a la derecha de la técnica/dirección voy a ser capaz de ir desde allí.

  • Así que usted está diciendo que cada .csv archivo de una sola fila y, a continuación, en que la sola fila, el primer valor es el año, seguido por los datos como los presentes por la parte de arriba?
  • Hola Factor3, que es sólo la forma en S/S decidió darle formato (primera vez que lo he utilizado, así que tendrá que mirar hacia fuera para que en el futuro)… Deja que me aclare… hay dos archivos – 2010.csv y 2011.csv; estos contienen ‘n’ el número de filas cada una de las cuales contiene dos columnas. Yo estaba tratando de simplificar la pregunta – pero, ¿está de acuerdo el formato es un poco engañoso ahora que he leído de nuevo!
  • He presentado varios ejemplos detallados y enfoques alternativos en este Q&A que usted u otras personas podrían resultar útiles.
InformationsquelleAutor Jon Clements | 2012-03-06

2 Comentarios

  1. 12

    Asumiendo que usted tiene un archivo llamado 2010.csv con el contenido de la

    category,value
    AB,100.00
    AB,200.00
    AC,150.00
    AD,500.00

    A continuación, utilizando la capacidad de aplicar múltiples funciones de agregación después de un groupby, usted puede decir:

    import pandas
    data_2010 = pandas.read_csv("/path/to/2010.csv")
    data_2010.groupby("category").agg([len, sum])

    Usted debe obtener un resultado que se ve algo como

              value     
                len  sum
    category            
    AB            2  300
    AC            1  150
    AD            1  500

    Nota que Wes es probable que vienen a señalar que la suma está optimizado y que probablemente debería uso de la np.suma.

    • Ese es el empujón que necesitaba – TY. Yo estaba tratando de todo tipo con pivot_table(data_2010, filas=’???’, aggfunc={‘???’: ‘???’}) etc… yo tenía un sentimiento de que estaba de más-que complica el problema. Gracias de nuevo.
  2. 16

    v0.21 respuesta

    Uso pivot_table con el index parámetro:

    df.pivot_table(index='category', aggfunc=[len, sum])
    
               len   sum
             value value
    category            
    AB           2   300
    AC           1   150
    AD           1   500

    <= v0.12

    Es posible hacer esto usando pivot_table para los interesados:

    In [8]: df
    Out[8]: 
      category  value
    0       AB    100
    1       AB    200
    2       AC    150
    3       AD    500
    
    In [9]: df.pivot_table(rows='category', aggfunc=[len, np.sum])
    Out[9]: 
                len    sum
              value  value
    category              
    AB            2    300
    AC            1    150
    AD            1    500

    Tenga en cuenta que el resultado que las columnas son jerárquicamente indexado. Si había varias columnas de datos, se obtiene un resultado como este:

    In [12]: df
    Out[12]: 
      category  value  value2
    0       AB    100       5
    1       AB    200       5
    2       AC    150       5
    3       AD    500       5
    
    In [13]: df.pivot_table(rows='category', aggfunc=[len, np.sum])
    Out[13]: 
                len            sum        
              value  value2  value  value2
    category                              
    AB            2       2    300      10
    AC            1       1    150       5
    AD            1       1    500       5

    La principal razón para utilizar __builtin__.sum vs np.sum es que usted consigue NA-manejo de ésta. Probablemente podría interceptar el Python integrado, va a hacer una nota sobre eso ahora.

Dejar respuesta

Please enter your comment!
Please enter your name here