es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo trazar series de tiempo con muchos NaN?

Originalmente tenía un dataframe que contenía el consumo de energía de algunos dispositivos como este:

first dataframe

y quería trazar el consumo de energía vs tiempo para diferentes dispositivos, una trama por cada una de las 6 fechas posibles. Después de agrupar por fecha, obtuve gráficos como este (para cada grupo = fecha):

good plot

Luego intenté crear una gráfica similar, pero intercambiar los roles de fecha y dispositivo para que esté agrupada por dispositivo y coloreada por fecha. Para hacerlo, preparé este dataframe:

new_dtf

Es similar al anterior, pero tiene muchos valores NaN debido a diferentes tiempos de medición. Pensé que no sería un problema, pero luego, después de agrupar por dispositivo, las subtramas se ven así (ex es solo el nombre del sub-dataframe extraído del bucle que pasa por grupos = dispositivos):

bad_plot

Este es el dataframe ex (el retraso medio entre observaciones es de alrededor de 20 segundos):

subplot_df

Pregunta: ¿Qué debo hacer para hacer que la trama agrupada por dispositivo se parezca a las agrupadas por fecha? (Me gustaría usar el dataframe ex, pero manejar de alguna manera los valores NaN).

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para hacer que la gráfica agrupada por dispositivo se vea como las agrupadas por fecha, podemos usar el método interpolate() de Pandas para llenar los valores NaN en el dataframe ex. Este método llenará valores faltantes con valores interpolados basados en los puntos de datos circundantes.

    Primero, podemos establecer la columna time como el índice del dataframe ex y luego aplicar el método interpolate(). Luego podemos restablecer el índice de nuevo como una columna y agrupar por la columna device y aplicar plotly.

    Código de ejemplo:

    import pandas as pd
    import plotly.express as px
    
    # establecer la columna time como índice e interpolar valores faltantes
    ex_interp = ex.set_index('time').interpolate().reset_index()
    
    # crear figura plotly usando datos interpolados
    fig = px.line(ex_interp, x='time', y='power', color='date', facet_col='device')
    
    fig.show()
    

    Esto debería producir una gráfica con el mismo diseño que las agrupadas por fecha, pero cada subtrama mostrará el consumo de energía vs tiempo para un dispositivo diferente.

Comments are closed.