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.

Extraer datos basados en una condición.

Tengo el siguiente conjunto de datos (muestra) del cual tengo que extraer un dataframe basado en una condición. El conjunto de datos consiste en máquinas (más de 1000), el tiempo de inactividad en horas, el estado y la razón del tiempo de inactividad. Hay muchas instancias de cada máquina en el conjunto de datos (al menos 1000). La condición para la extracción es que el dataframe solo debe contener aquellas máquinas que hayan estado activas durante los últimos 7 días consecutivos (incluyendo la fecha). El conjunto de datos no contiene registros para cada día de cada máquina. Algunos días se han omitido. Para esos días, no estoy seguro si la máquina estaba activa o no. Estoy tratando de hacerlo de manera continuada, por ejemplo, para la fecha en cada fila, estoy tratando de verificar si esa máquina única ha estado activa durante los últimos 7 días (pd.Timedelta(days = 6)). Creo que hay una manera más ordenada y organizada de lograr esto, pero hasta ahora no he podido encontrar un algoritmo. Soy prácticamente un programador novato en Python. ¿Hay alguna manera en la que pueda organizar las máquinas y luego revisar cada fecha? También me gustaría poder hacer un seguimiento de aquellas máquinas para las cuales se han omitido registros en algunos días. No necesito el código en Python. Agradecería mucho si alguien pudiera ayudarme a encontrar un algoritmo eficaz a través del cual pueda obtener el nuevo dataframe.

¡Muchas gracias de antemano y felices fiestas! 🙂

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Algoritmo para extraer un Dataframe basado en una condición

    1. Importar las librerías necesarias de Python (por ejemplo, pandas, numpy) para la manipulación de datos.
    2. Leer el conjunto de datos proporcionado como un pandas DataFrame.

    3. Convertir la columna DATE al formato de fecha y hora utilizando la función to_datetime de pandas.

    4. Agrupar el DataFrame por la columna MACHINE.

    5. Crear una nueva columna en el DataFrame llamada “active_day_count” para realizar un seguimiento del número de días activos para cada máquina.

    6. Utilizar un bucle for para iterar a través de cada máquina única en el conjunto de datos.

    7. Dentro del bucle for, iterar a través de cada fila para la máquina actual y verificar si la máquina estuvo activa durante los últimos 7 días (incluyendo el día actual).

    • Si la máquina estuvo activa, agregar 1 a la columna “active_day_count” para la fila actual.

    • Si la máquina estuvo inactiva, establecer la columna “active_day_count” en 0 para la fila actual.

    1. Después de iterar a través de todas las filas para la máquina actual, filtrar el DataFrame basado en las máquinas que han estado activas durante los últimos 7 días consecutivamente (es decir, que tienen un valor de “active_day_count” de 7 o más).

    2. Agregar el DataFrame filtrado a un nuevo DataFrame (por ejemplo, llamado “active_machines”).

    3. Después de iterar a través de todas las máquinas en el conjunto de datos, el DataFrame “active_machines” contendrá solo aquellas máquinas que estuvieron activas durante los últimos 7 días consecutivamente.

    4. Opcionalmente, puedes realizar un seguimiento de las máquinas para las cuales se han omitido registros durante algunos días agregando una nueva columna al DataFrame llamada “skipped_days”. Dentro del bucle for, puedes utilizar la función datetime para recorrer todas las fechas de los últimos 7 días y verificar si hay un registro para la máquina actual en esa fecha. Si falta un registro, actualizar la columna “skipped_days” para la fila actual para indicar el número de días omitidos.

    5. Finalmente, puedes mostrar el nuevo DataFrame “active_machines” como el DataFrame extraído.

    Recuerda, este algoritmo es solo una guía general y los detalles pueden variar según tu implementación. ¡Buena suerte programando!

Comments are closed.