Tengo datos sobre el período de construcción de viviendas en áreas de difusión. He transferido estos datos a mis áreas de estudio y me gustaría determinar el período medio de construcción para cada área de estudio. El único problema es que la información de las columnas es el número de viviendas y no quiero la mediana de estas, sino el título de la columna para llenar la fila en un nuevo campo (o algo más que lo indique, preferiblemente el período en el texto formato, pero no es el fin del mundo si es solo un número que indica el período).
Adjunto una imagen de la tabla de atributos con los campos relevantes resaltados. Hay un campo MEDIANO pero los datos que estoy usando fueron creados por otra persona y están mal documentados, por lo que no estoy seguro de si el cálculo ya se realizó o no.
(Las siete columnas representan siete períodos de tiempo no superpuestos ordenados cronológicamente. El campo [Mediana] parece indexar el período en el que la construcción total estaba a medio completar; es decir, registra el tiempo medio ) .
fuente
Respuestas:
Suponiendo que las columnas aparecen en orden de tiempo, la primera fila (por ejemplo) indica que la construcción total a través de cada período fue
La construcción estaba a la mitad en 2230/2 = 1115. Esto ocurrió durante el período 4, porque al final del período 3 el total fue de 585, al final del período 4 el total fue de 1595 y 585 <= 1115 <1595.
Este parece ser el resultado informado por la columna [Mediana], que proporciona el índice del período (comenzando en 1 a la izquierda).
Puede codificar esto en su idioma favorito . Sin embargo, la tabla es tan pequeña (100 filas) que una hoja de cálculo será conveniente, aunque solo sea para verificar lo que hace más formalmente en Python o lo que sea. Así es como podría verse:
Las primeras tres filas de datos tienen los mismos valores que los suyos. Las siguientes dos filas de datos (rodeadas de líneas en blanco) se eligen más abajo en su tabla. Las últimas cinco filas de datos ejercitan un poco el algoritmo.
(Tenga en cuenta que, como se muestra en las últimas dos líneas de la hoja de cálculo, cómo Excel elige el período posterior cada vez que el medio cae exactamente entre dos períodos. Esta no es necesariamente la respuesta "correcta", pero es válida).
Aquí están las fórmulas en las columnas H: R:
No tienes que escribirlos todos. El único tipo de escritura necesario es:
=H2+A2
en I2. Arrastre esto a través de O2. Esto calcula las sumas acumulativas. Requiere que las columnas A: G estén en orden cronológico.=O2/2
en P2. Esto encuentra la mitad del total.=Match(P2,H2:O2,1)
en Q2. Esto indexa la columna donde la construcción estaba a medio completar.=Offset($A$1:$G$1,0 0, Q2-1, 1, 1)
en R2. Esto obtiene el encabezado de columna correspondiente al índice.Luego pegue
0
toda la columna H y arrastre I2: R2 a tantas filas como sea necesario.Esto sirve efectivamente como pseudocódigo para el algoritmo. La parte más complicada será la búsqueda para implementar la
MATCH
función de Excel . Pero eso no requiere ninguna habilidad: no es ineficaz buscar cada conjunto de sumas acumulativas secuencialmente (en lugar de con el algoritmo de búsqueda binario preferido) porque estos conjuntos son muy cortos.fuente
Si desea devolver la columna mediana, probablemente usaría un cursor de python para recorrer las filas. Use los campos para completar una lista y luego devuelva el elemento central (se indexará en [3] para 7 elementos) después de llamar a la función sorted () en la lista que ha creado. Te volveré a escribir un poco de código cuando regrese del almuerzo.
fuente