pandas utilizando .donde () para reemplazar en .groupby () objeto

jorijnsmit:

Considere una trama de datos que contiene varios grupos de números enteros:

d = pd.DataFrame({'label': ['a','a','a','a','b','b','b','b'], 'value': [1,2,3,2,7,1,8,9]})
d
    label   value
0   a   1
1   a   2
2   a   3
3   a   2
4   b   7
5   b   1
6   b   8
7   b   9

Para cada uno de estos grupos de números enteros, cada entero tiene que ser más grande o igual que el anterior. Si no es el caso, se toma el valor del entero anterior. Sustituyo el uso

s.where(~(s < s.shift()), s.shift())

que funciona bien para una sola serie. I puede incluso grupo de la trama de datos, y el bucle a través de cada serie extraídos:

grouped = s.groupby('label')['value']
for _, s in grouped:
    print(s.where(~(s < s.shift()), s.shift()))
0    1.0
1    2.0
2    3.0
3    3.0
Name: value, dtype: float64
4    7.0
5    7.0
6    8.0
7    9.0
Name: value, dtype: float64

Sin embargo, ¿cómo ahora consigo estos valores de nuevo en mi trama de datos original?

O, ¿hay una mejor manera de hacer esto? No me importa para el uso .groupbyy no consideran el bucle una solución bastante bien ...

ben.t:

IIUC, se puede utilizar cummaxen el groupbycomo:

d['val_max'] = d.groupby('label')['value'].cummax()
print (d)
  label  value  val_max
0     a      1        1
1     a      2        2
2     a      3        3
3     a      2        3
4     b      7        7
5     b      1        7
6     b      8        8
7     b      9        9

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=364837&siteId=1
Recomendado
Clasificación