Este é meu DataFrame:
import pandas as pd
df = pd.DataFrame(
{
'a': ['long', 'long', 'short', 'long', 'short', 'short', 'short'],
'b': [1, -1, 1, 1, -1, -1, 1],
}
)
A saída esperada é criar a coluna a_1
:
a b a_1
0 long 1 long
1 long -1 long
2 short 1 short
3 long 1 long
4 short -1 long
5 short -1 long
6 short 1 short
Lógica:
a_1
deve ser criado assim:
df.loc[df.b.eq(-1), 'a_1'] = 'long'
df['a_1'] = df.a_1.fillna(df.a)
Esse problema é realmente estranho. Quando tento, fillna
não funciona. Eu tentei com a versão 1.2.4 do pandas e funcionou, mas com a versão 2.1.4 não funciona. Esta versão é a versão padrão do Colab atualmente e eu executei este código no Colab.
Isso funciona bem no Pandas versão 2.2.2, pode ser um bug dessa versão.
Mas você pode obter o mesmo resultado assim:
Outra alternativa:
Isso parece ser causado pelo 2.1.4 gerando NaNs como 'nan' ao criar colunas que são strings com apenas valores parciais. Seja qual for a causa, não é recomendado pelo Pandas atualizar continuamente valores que correspondem a uma declaração condicional. A
mask
função do Pandas é personalizada para essa situação, então use-a.