Quiero crear una nueva columna en un pandas
marco de datos aplicando una función a dos columnas existentes. Después de esta respuesta , he podido crear una nueva columna cuando solo necesito una columna 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)
Sin embargo, no puedo entender cómo hacer lo mismo cuando la función requiere múltiples argumentos. Por ejemplo, ¿cómo creo una nueva columna pasando la columna A y la columna B a la función a continuación?
def fxy(x, y):
return x * y
np.vectorize()
es asombrosamente rápida. Gracias.np.vectorize
no funciona. La razón es que una de las columnas es del tipopandas._libs.tslibs.timestamps.Timestamp
, que se convierte en el tiponumpy.datetime64
por la vectorización. Los dos tipos no son intercambiables, lo que hace que la función se comporte mal. ¿Alguna sugerencia sobre esto? (Aparte de que.apply
aparentemente esto debe evitarse)Puede ir con el ejemplo de @greenAfrican, si le es posible reescribir su función. Pero si no desea reescribir su función, puede envolverla en una función anónima dentro de aplicar, como esta:
fuente
Esto resuelve el problema:
También puedes hacer:
fuente
Si necesita crear varias columnas a la vez :
Crea el marco de datos:
Crea la función:
Asigne las nuevas columnas:
fuente
Una sintaxis limpia de estilo dict más:
o,
fuente