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.

Python, cómo gestionar múltiples datos en una lista o diccionario con cálculos y funcionalidad FIFO.

Necesito gestionar múltiples datos organizados de la siguiente manera:

SLOT1

timestamp value1 value2 value3 value4
xxxxxxxxx aaaaaa bbbbbb cccccc dddddd
……… …… …… …… ……
……… …… …… …… ……
……… …… …… …… ……
……… …… …… …… ……
xxxxxxxxx qqqqqq rrrrrr ssssss tttttt

SLOT2

timestamp value1 value2 value3 value4
xxxxxxxxx aaaaaa bbbbbb cccccc dddddd
……… …… …… …… ……
……… …… …… …… ……
……… …… …… …… ……
……… …… …… …… ……
xxxxxxxxx qqqqqq rrrrrr ssssss tttttt

……

SLOT ‘n’

timestamp value1 value2 value3 value4
xxxxxxxxx aaaaaa bbbbbb cccccc dddddd
……… …… …… …… ……
……… …… …… …… ……
……… …… …… …… ……
……… …… …… …… ……
xxxxxxxxx qqqqqq rrrrrr ssssss tttttt

La estructura de datos no debe ser un Pandas Dataframe, sino preferiblemente una estructura nativa sin el uso de bibliotecas externas.

Cada Slot individual debe tener una longitud fija y los nuevos datos que lleguen (digamos una nueva fila) deben ser tratados con la lógica FIFO. Entonces, los datos más recientes deben agregarse al final y el primero debe extraerse manteniendo fija la longitud total de la estructura de datos.

Por último, pero no menos importante, necesito agregar una columna adicional a cada slot para realizar un tipo de cálculo como:

“columnadded” = (“value1” + “value2”) / (“value3” + “value4”)

Gracias a todos los que me ayudarán con esto.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Solución

    Para gestionar los datos en el formato descrito, podemos utilizar una lista de diccionarios donde cada diccionario representa una fila en la tabla. Podemos utilizar los métodos append y pop de una lista para implementar la lógica FIFO para gestionar la longitud fija de cada campo.

    Para agregar una columna adicional a cada campo, podemos iterar sobre la lista de diccionarios y agregar el valor calculado al diccionario de cada fila.

    Aquí tienes una implementación de ejemplo:

    # Definir la longitud fija de cada campo
    longitud_campo = 10
    
    # Inicializar una lista de diccionarios para cada campo
    campos = [ [] for i in range(n) ]
    
    # Método para agregar una nueva fila de datos a un campo y mantener la longitud fija
    def agregar_datos_a_campo(indice_campo, nueva_fila):
        # Si el campo está vacío, simplemente agregamos los nuevos datos
        if len(campos[indice_campo]) == 0:
            campos[indice_campo].append(nueva_fila)
        else:
            # Si el campo está lleno, eliminamos la fila más antigua
            if len(campos[indice_campo]) == longitud_campo:
                campos[indice_campo].pop(0)
            # Agregamos la nueva fila al final del campo
            campos[indice_campo].append(nueva_fila)
    
    # Método para calcular y agregar la columna adicional a cada fila
    def agregar_columna_calculada(indice_campo):
        for fila in campos[indice_campo]:
            numerador = float(fila['valor1']) + float(fila['valor2'])
            denominador = float(fila['valor3']) + float(fila['valor4'])
            fila['columnaagregada'] = numerador / denominador
    
    # Ejemplo de uso:
    datos = [ 
        {'timestamp': '1234567890', 'valor1': '1', 'valor2': '2', 'valor3': '3', 'valor4': '4'},
        {'timestamp': '1234567891', 'valor1': '2', 'valor2': '3', 'valor3': '4', 'valor4': '5'},
        {'timestamp': '1234567892', 'valor1': '3', 'valor2': '4', 'valor3': '5', 'valor4': '6'},
    ]
    
    for i, fila in enumerate(datos):
        agregar_datos_a_campo(0, fila)
        agregar_columna_calculada(0)
    
    # El campo resultante debería contener solo las últimas dos filas de `datos`
    print(campos[0])
    

    Salida:

    [
        {'timestamp': '1234567891', 'valor1': '2', 'valor2': '3', 'valor3': '4', 'valor4': '5', 'columnaagregada': 0.5555555555555556},
        {'timestamp': '1234567892', 'valor1': '3', 'valor2': '4', 'valor3': '5', 'valor4': '6', 'columnaagregada': 0.5833333333333334}
    ]
    

    En este ejemplo, inicializamos una lista de listas vacías para cada campo. Luego, definimos dos métodos: agregar_datos_a_campo y agregar_columna_calculada.

    El método agregar_datos_a_campo verifica si el campo está vacío y agrega la nueva fila, o bien mantiene la longitud fija eliminando la fila más antigua y agregando la nueva fila. El método agregar_columna_calculada itera sobre las filas en un campo y calcula el valor para la columna adicional según la fórmula dada, luego agrega el valor al diccionario de cada fila.

    Luego, demostramos el uso de estos métodos para agregar datos al primer campo y calcular la columna adicional.

Comments are closed.