Meu DataFrame é:
import pandas as pd
df = pd.DataFrame(
{
'a': [20, 9, 31, 40],
'b': [1, 10, 17, 30],
}
)
Resultado esperado: Criando colunac
a b c
0 20 1 20
1 9 10 20
2 31 17 17
3 40 30 31
Passos:
c
é o valor máximo entre df.b
e df.a.shift(1).bfill()
.
Minha tentativa:
df['temp'] = df.a.shift(1).bfill()
df['c'] = df[['temp', 'b']].max(axis=1)
É a maneira mais limpa/melhor abordagem?
Tente assim
Saída:
Se você não quiser a coluna temporária, poderá substituir os valores na coluna deslocada usando
where()
uma linha.Isso é semelhante ao
combine()
método postado na outra resposta, mas este faz uma comparação vetorizada enquantocombine()
faz isso elemento a elemento, então deve ser muito mais rápido à medida que o comprimento do dataframe aumenta.use numpy
fmax
de maneira rápida e simplesdf
ImportError: não foi possível alterar o nome 'DataError' de 'pandas.core.base' (/Users/ernidiahsusanti/anaconda3/lib/python3.11/site-packages/pandas/core/base.py)