Meu DataFrame é:
import pandas as pd
df = pd.DataFrame(
{
'a': [20, 30, 2, 5, 10]
}
)
A saída esperada é pct_change()
de a
:
a pct_change
0 20 -50.000000
1 30 50.000000
2 2 -93.333333
3 5 150.000000
4 10 100.000000
Quero comparar df.a.iloc[0]
com 40 para o primeiro valor de pct_change
. Se eu usar df['pct_change'] = df.a.pct_change().mul(100)
, o primeiro valor será NaN
.
Minha tentativa:
def percent(a, b):
result = ((a - b) / b) * 100
return result.round(2)
df.loc[df.index[0], 'pct_change'] = percent(df.a.iloc[0], 40)
Existe uma maneira melhor/mais eficiente?
Você pode usar o
fill_value
argumento de palavra-chave empct_change
.A
pct_change
documentação diz:e
Series.shift
aceita umfill_value
argumento para preencher as linhas ausentes.Saída:
Um método que achei realmente útil é usar
apply
o método junto comlambda
. Ele verifica o índice e executa de acordo. Você também pode fazer isso no DataFrame sem problemas.Então seria algo assim:
Preste atenção
if row.name == 0:
também ao que o define para compará-lo com o primeiro valor.