[Python-es] Obtener índices para un resample con Pandas

Kiko kikocorreoso en gmail.com
Jue Jul 10 09:02:21 CEST 2014


El 9 de julio de 2014, 21:34, Kiko <kikocorreoso en gmail.com> escribió:

>
> El 9 de julio de 2014, 18:03, AGTUGO <agtugo en gmail.com> escribió:
>
> ¿Podrías pasar una porción de tu código para fines educativos de la
>> solución?
>>
>>
> Mañana a primera hora lo tienes.
>
> De nuevo, gracias.
>

Ahí va:
----------------------------------------------------------------------------------------------------------------
import numpy as np
import pandas as pd

# Creo una serie con distribución normal, media 5 y desv estándar 5
# para hacer las pruebas
mu = 5
sigma = 5
data = sigma * np.random.randn(300000) + mu
index = pd.date_range('1970/01/01', periods = 300000, freq = 'H')

# Creo un dataframe de datos horarios
datos_de_partida = pd.DataFrame(data, index = index)

# Extraigo los máximos (o lo que quieras) mensuales
# 1M indica 1 mes
# Si quisiera los máximos anuales usaría 1A, etc.
grouper = pd.TimeGrouper("1M")
ext_group = datos_de_partida.groupby(grouper)

# Creo un df con los índices, las fechas de los extremos
extremes = ext_group.max()
extremes.index = ext_group.idxmax().values
# La columna de extremos la llamo 'extremes'
extremes.columns = ['extremes']
# Y además creo una columna con las fechas de esos extremos
# Las fechas ya las tengo en los índices pero me lo necesito así
extremes['dates'] = extremes.index
----------------------------------------------------------------------------------------------------------------
El resultado sería algo así como:
extremes dates   1970-01-01 22:00:00 17.937839 1970-01-01 22:00:00  1970-02-20
09:00:00 18.647249 1970-02-20 09:00:00  1970-03-11 06:00:00 25.111108
1970-03-11
06:00:00  1970-04-27 16:00:00 20.998373 1970-04-27 16:00:00  1970-05-17
03:00:00 18.304925 1970-05-17 03:00:00  1970-06-12 23:00:00 20.684410
1970-06-12
23:00:00  1970-07-19 18:00:00 22.098663 1970-07-19 18:00:00  1970-08-13
06:00:00 20.925366 1970-08-13 06:00:00  1970-09-20 03:00:00 20.409511
1970-09-20
03:00:00
 ... y continua para cada mes hasta el final del df datos_de_partida

Saludos.

P.D.: El resultado debe ser 100x más eficiente que mi implementación
original \o/


>
>> _______________________________________________
>> Python-es mailing list
>> Python-es en python.org
>> https://mail.python.org/mailman/listinfo/python-es
>> FAQ: http://python-es-faq.wikidot.com/
>>
>>
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20140710/ca3a95b1/attachment.html>


Más información sobre la lista de distribución Python-es