Eu quero criar uma nova coluna em um pandas
quadro de dados aplicando uma função a duas colunas existentes. Após esta resposta, consegui criar uma nova coluna quando preciso apenas de uma coluna como argumento:
import pandas as pd
df = pd.DataFrame({"A": [10,20,30], "B": [20, 30, 10]})
def fx(x):
return x * x
print(df)
df['newcolumn'] = df.A.apply(fx)
print(df)
No entanto, não consigo descobrir como fazer a mesma coisa quando a função exige vários argumentos. Por exemplo, como eu crio uma nova coluna passando a coluna A e a coluna B para a função abaixo?
def fxy(x, y):
return x * y
np.vectorize()
é incrivelmente rápida. Obrigado.np.vectorize
não funciona. O motivo é que uma das colunas é do tipopandas._libs.tslibs.timestamps.Timestamp
, que é transformada no tiponumpy.datetime64
pela vetorização. Os dois tipos não são intercambiáveis, fazendo com que a função se comporte mal. Alguma sugestão sobre isso? (Fora.apply
isso, aparentemente, isso deve ser evitado)Você pode usar o exemplo @greenAfrican, se for possível reescrever sua função. Mas se você não deseja reescrever sua função, pode envolvê-la em uma função anônima dentro de apply, assim:
fonte
Isso resolve o problema:
Você também pode fazer:
fonte
Se você precisar criar várias colunas ao mesmo tempo :
Crie o quadro de dados:
Crie a função:
Atribua as novas colunas:
fonte
Mais uma sintaxe limpa de estilo de ditado:
ou,
fonte