Llene los valores nulos en una columna usando el cambio porcentual de una segunda columna mientras agrupa por una tercera columna

ahh_real_numbers

Tengo un marco de datos que se parece a esto:

grp    val    run
a      5      10
b      10     1
a      NaN    8
a      NaN    4
b      NaN    5
b      NaN    4
a      10     6
a      NaN    6

Quiero llenar los espacios en la valcolumna aplicando el mismo cambio porcentual que se calculó. Sin embargo, también necesito agrupar usando la grpcolumna. Debería terminar con algo como esto:

grp    val    run
a      5      10
b      10     1
a      4      8
a      2      4
b      50     5
b      40     4
a      10     6
a      10     6

Solo quiero reemplazar valores que son nulos. Observe que el 10 en la fila siete "restablece" el relleno hacia adelante.

Sin tener que agrupar, podría simplemente obtener el cambio porcentual runy multiplicar la valcelda de la fila anterior por la celda de cambio porcentual de la fila actual donde valno sea nulo.

Estaba pensando que podría ordenar el marco de datos usando grp, pero luego todavía tendría que preocuparme por el caso límite de cuando los grpvalores cambian.

Quang Hoang

Intentemos:

# identify the na blocks and group by `grp` and these blocks
na_blocks = df['val'].notna().groupby(df['grp']).cumsum()    
g = df.groupby(['grp', na_blocks])

# "pct change" on run
df['x'] = df['run'] / g['run'].shift(fill_value=1)

# cumprod() for cumulative change
# `ffill` and `transform('first')` behave the same 
# since we are grouping on non-nan following by consecutive nan's
df['val'] = g['val'].ffill() * g['x'].cumprod() / g['run'].transform('first')

Salida ( xla columna adicional que se puede quitar):

  grp   val  run     x
0   a   5.0   10  10.0
1   b  10.0    1   1.0
2   a   4.0    8   0.8
3   a   2.0    4   0.5
4   b  50.0    5   5.0
5   b  40.0    4   0.8
6   a  10.0    6   6.0
7   a  10.0    6   1.0

Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.

En caso de infracción, por favor [email protected] Eliminar

Editado en
0

Déjame decir algunas palabras

0Comentarios
Iniciar sesiónRevisión de participación posterior

Artículos relacionados

Devuelva todos los valores posibles de una columna mientras también agrupa por valores en otra columna en SQL

Devuelva todos los valores posibles de una columna mientras también agrupa por valores en otra columna en SQL

Suma de una columna agrupada por la segunda columna con los grupos hechos en base a la tercera columna

Pandas: llene una columna con el recuento de # de obs entre ocurrencias en una segunda columna

Llene los valores nulos de una columna con los valores de la misma fila pero una columna diferente

Cómo comparar los valores de columna de dos Dataframs y asignar el valor de una tercera columna en Python

Hive seleccione una columna basada en una segunda columna donde los valores de la segunda columna son diferentes

¿Cómo cambio los valores en una columna en función de una columna diferente?

Iterando sobre un DataFrame, evaluando los valores de la columna y estableciendo el valor en una tercera columna

Calcular el cambio porcentual en una columna dentro de un grupo en Pandas

Cuente los valores únicos de una columna mediante combinaciones por pares de otra columna y agrupe por tercera columna en R

¿Puedo enumerar los valores únicos para una columna mientras agrupo por otra columna en R?

¿Cómo agrupo con una columna clave, usando la condición en la segunda columna y agregando la tercera columna por separado para el día de la semana y el fin de semana?

Agregar valores de una columna a otra con valores perdidos en la segunda columna usando R

¿Cómo modificar los valores nulos de una columna en función de otra columna?

¿Cómo modificar los valores nulos de una columna en función de otra columna?

contar todos los valores de cadena en una columna determinada de una tabla y agruparlos según la tercera columna

Copie los datos de una columna a una columna diferente en otra hoja según los datos de una tercera columna

los pandas ordenan una columna por valores en otra columna

cómo encontrar el valor de la primera columna por valores máximos en la segunda columna (en una matriz)

Pandas: reemplace los valores en la columna si aparecen en otra columna, con valores de una tercera

SQL: reste los elementos en la columna entre sí, según la clasificación en la segunda columna y agregada por una tercera columna

Copie valores específicos de una columna a una segunda columna

Armadillo: llene una matriz a partir de los valores en un vector de columna

¿Una fórmula para dividir una columna en 2? Todos los valores de las filas de números pares irán a la segunda columna, las filas de números impares irán a la tercera columna

usando todos los valores de una columna en otra consulta

Cómo condicionar el bucle para que una columna llene los valores de otra columna en el marco de datos de pandas

Cómo condicionar el ciclo para que una columna llene los valores de otra columna en el marco de datos de pandas

Java: Cómo sumar todos los valores de una columna sobre la base de los criterios en una segunda columna usando HashMaps

TOP Lista

CalienteEtiquetas

Archivo