El 20 de noviembre de 2013 23:10, Alberto Curro <bertothun...@gmail.com>escribió:
> Hola lista, > > estoy jugando con Pandas para un pequeño proyecto profesional donde > tengo que analizar datos de unos servidores. Hasta ahora se integraban > estos CSV en servidores SQL y se ejecutaban consultas sobre ellos para > generar unos report. > > Básicamente cada CSV contiene los datos de procesado del servidor, con > requests desde un cliente, tiempos de procesado en el servidor (en > segundos) en las distinas etapas, y forwarding a otro servidor, con su > respuesta (http result code). > > El CSV contendría algo tal que: > > date, time, uri, size, process_request, parsing, transform, forward, > result_code, .... > > Con pandas cargo el CSV diario y proceso a procesar, que no es otra cosa > que agrupamientos: > > - por result code > - por hora > - por tamaño > > hay operaciones adicionales, pero que no importan ahora. > > La cuestión es: ¿cómo hago el agrupado por hora y result? he probado > varios métodos, alguno me funciona, pero estoy seguro que pandas me ofrece > algo mejor y/o más eficiente. > > La operación sería el equivalente a un SELECT GROUP BY (time, > result_code) WHERE (time > 22:59:59 y time < 23:59:59), por poner un > ejemplo. Y perdonad mi SQL, hace tiempo que no lo uso... demasiado. > > Pues bien, mientras jugueteaba, hice esto: > > dft = df[df.time > '22:59:59'] > dft = dft[dft.time < '23:59:59'] > > grouped = dft.groupby('result_code') > > Básicamente ahora tengo el agrupado hecho, pero si hago un: > > grouped.first() > > Veo algo tal que: > > date time > uri process .... > result > 200 2013/11/18 2013/11/18 > Perdón! me lié con la combinación de teclas :-( Decía que con la operación: grouped = dft.groupby('result_code') grouped.first() veo algo tal que: date time uri process .... result 200 2013/11/18 2013/11/18 2013/11/18 2013/11/18 400 2013/11/18 2013/11/18 2013/11/18 2013/11/18 Y no lo que esperaría ver ahí, o sea, los campos tal cual. Se confirma que los valores no son correctos con un poco de navegación: df.groupby('result_code').first().uri result 200 2013/11/18 400 2013/11/18 df.groupby('result_code').first().time result 200 2013/11/18 400 2013/11/18 ¿por qué ocurre esto? Estoy leyendo la documentación de pandas pero no veo qué hago mal... Por otro lado, si agrupo por dos campos, es incluso peor: df3 = df.groupby(['result_code', 'time']) df3.first() <class 'pandas.core.frame.DataFrame'> MultiIndex: 2203 entries, (200, '23:00:00') to (408, '23:01:26') Data columns: date 2203 non-null values request_time 2203 non-null values filename 2203 non-null values uri 2203 non-null values ..... dtypes: object(9) df3.uri 200 00:00:00 http://post.vsslive5-i.akamaihd.net/206570/809_hr .... 23:00:04 http://post.vsslive1-i.akamaihd.net/206543/810_tv 23:00:05 http://post.vsslive5-i.akamaihd.net/206570/809_hr 400 18:05:05 http://post.vsslive1-i.akamaihd.net/206570/808_hr<http://post.vsslive5-i.akamaihd.net/206570/809_hr> ... 22:51:00 http://post.vsslive2-i.akamaihd.net/206533/709_hr<http://post.vsslive5-i.akamaihd.net/206570/809_hr> Lo que busco es: agrupar por result_code, dentro de una hora determinada, o un rango, y tener el subrango de datos para calcular con ellos. ¿Sólo se puede hacer mediante la primera forma? Aunque rápido, creo que debería poder hacerlo de la segunda manera, no? Saludos
_______________________________________________ Python-es mailing list Python-es@python.org https://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/