Je souhaite créer une nouvelle colonne dans un pandas
bloc de données en appliquant une fonction à deux colonnes existantes. Suite à cette réponse, j'ai pu créer une nouvelle colonne lorsque je n'ai besoin que d'une seule colonne comme argument:
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)
Cependant, je ne peux pas comprendre comment faire la même chose lorsque la fonction nécessite plusieurs arguments. Par exemple, comment créer une nouvelle colonne en passant la colonne A et la colonne B à la fonction ci-dessous?
def fxy(x, y):
return x * y
np.vectorize()
est incroyablement rapide. Je vous remercie.np.vectorize
ne fonctionne pas. La raison est que l'une des colonnes est du typepandas._libs.tslibs.timestamps.Timestamp
, qui est transformé en typenumpy.datetime64
par la vectorisation. Les deux types ne sont pas interchangeables, ce qui entraîne un mauvais comportement de la fonction. Des suggestions à ce sujet? (Autre que.apply
cela est apparemment à éviter)Vous pouvez aller avec l'exemple @greenAfrican, s'il vous est possible de réécrire votre fonction. Mais si vous ne voulez pas réécrire votre fonction, vous pouvez l'envelopper dans une fonction anonyme à l'intérieur de apply, comme ceci:
la source
Cela résout le problème:
Vous pouvez également faire:
la source
Si vous devez créer plusieurs colonnes à la fois :
Créez le dataframe:
Créez la fonction:
Attribuez les nouvelles colonnes:
la source
Une autre syntaxe propre de style dict:
ou,
la source