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 agregar un nuevo conjunto de datos a un conjunto de datos existente basado en una condición de series de tiempo de índice en Python.

Soy un traductor español que traduce documentos de TI. Traduzco lo siguiente al español. No traduzcas el código y la salida en formato Markdown

“Soy realmente nuevo en Python. Por favor, alguien puede ayudarme con mi problema de cómo agregar un nuevo conjunto de datos a un conjunto de datos existente basado en una condición de serie de tiempo de índice. Necesito agregar cada fila de df2 a df1, basándome en su tiempo con una tolerancia de <5 minutos.

Aquí tienes un ejemplo de los datos que tengo.

df1

Time A
01/09/2021 06:50 1
01/09/2021 06:55 2
01/09/2021 07:00 3
01/09/2021 07:05 6
01/09/2021 07:10 3
01/09/2021 07:15 2
01/09/2021 07:20 1
01/09/2021 07:25 2

df2

Time B
01/09/2021 06:51 0.6
01/09/2021 06:55 0.2
01/09/2021 07:12 0.3
01/09/2021 07:16 0.6

Resultado esperado
Se agregarán cada una de las filas de df2 que coincidan en tiempo con una tolerancia (digamos 4 minutos) a la fila de df1.

df3

Time A B
01/09/2021 06:50 1 0.6
01/09/2021 06:55 2 0.2
01/09/2021 07:00 3 NAN
01/09/2021 07:05 6 NAN
01/09/2021 07:10 3 0.3
01/09/2021 07:15 2 0.6
01/09/2021 07:20 1 NAN
01/09/2021 07:25 2 NAN

Realmente agradezco tu ayuda. Gracias”

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para llevar a cabo esta tarea, puedes utilizar el método merge de pandas DataFrame con una combinación externa. Aquí están los pasos que necesitas seguir:

    1. Primero, convierte las columnas ‘Time’ en ambos dataframes al formato de fecha y hora de pandas para poder restarlas más tarde.
    2. Establece la columna ‘Time’ como el índice para ambos dataframes.
    3. Utiliza el método merge de pandas para unir los dos dataframes con una combinación externa en el índice.
    4. Utiliza la indexación booleana de pandas para seleccionar solo aquellas filas que coincidan en tiempo con una tolerancia <= 5 minutos.
    5. Utiliza el método fillna para reemplazar los valores NaN por ‘NAN’.

    Aquí está el código para llevar a cabo esto:

    import pandas as pd
    
    # Carga los datos en los dataframes
    df1 = pd.read_csv('df1.csv')
    df2 = pd.read_csv('df2.csv')
    
    # Convierte la columna 'Time' al formato datetime
    df1['Time'] = pd.to_datetime(df1['Time'], format='%d/%m/%Y %H:%M')
    df2['Time'] = pd.to_datetime(df2['Time'], format='%d/%m/%Y %H:%M')
    
    # Establece la columna 'Time' como índice
    df1.set_index('Time', inplace=True)
    df2.set_index('Time', inplace=True)
    
    # Une los dataframes en el índice con una combinación externa
    df3 = pd.merge(df1, df2, how='outer', left_index=True, right_index=True)
    
    # Selecciona las filas dentro de la tolerancia (<= 5 minutos)
    tolerance = pd.Timedelta(minutes=5)
    mask = df3.index.to_series().sub(df3.index.to_series().shift()) < tolerance
    df3 = df3[mask]
    
    # Reemplaza los valores NaN por 'NAN'
    df3.fillna('NAN', inplace=True)
    
    # Restablece el índice al formato original
    df3.reset_index(inplace=True)
    df3['Time'] = df3['Time'].dt.strftime('%d/%m/%Y %H:%M')
    

    Espero que esto sea de ayuda. Avísame si tienes alguna pregunta.

Comments are closed.