Tengo un marco de datos de pandas con dos columnas. Necesito cambiar los valores de la primera columna sin afectar la segunda y recuperar todo el marco de datos con solo los valores de la primera columna cambiados. ¿Cómo puedo hacer eso usando aplicar en pandas?
python
pandas
dataframe
python-3.5
Amani
fuente
fuente
apply
en una situación como esta. Operar en la columna directamente en su lugar.apply
tanto como sea posible. Si no está seguro de que necesita usarlo, probablemente no lo haga. Recomiendo echar un vistazo a ¿ Cuándo debería utilizar pandas apply () en mi código? .Respuestas:
Dado un marco de datos de muestra
df
como:lo que quieres es:
eso devuelve:
fuente
apply
nunca debe usarse en una situación como estaapply
usa un bucle interno sobre las filas que es mucho más lento que las funciones vectorizadas, como por ejemplodf.a = df.a / 2
(ver la respuesta de Mike Muller).Para una sola columna mejor para usar
map()
, así:fuente
map()
mejor queapply()
para una sola columna?df['file_name'] = df['Path'].map(lambda a: os.path.basename(a))
No necesitas una función en absoluto. Puede trabajar en una columna completa directamente.
Datos de ejemplo:
La mitad de todos los valores en la columna
a
:fuente
Aunque las respuestas dadas son correctas, modifican el marco de datos inicial, lo que no siempre es deseable (y, dado que el OP solicitó ejemplos "usando
apply
", podría ser que quisieran una versión que devuelva un nuevo marco de datos, como loapply
hace).Esto es posible usando
assign
: es válido paraassign
las columnas existentes, como dice la documentación (el énfasis es mío):En breve:
Tenga en cuenta que la función pasará todo el marco de datos, no solo la columna que desea modificar, por lo que deberá asegurarse de seleccionar la columna correcta en su lambda.
fuente
Si está realmente preocupado por la velocidad de ejecución de su función de aplicación y tiene un gran conjunto de datos para trabajar, puede usar más rápido para hacer una ejecución más rápida, aquí hay un ejemplo para un marco de datos más rápido en pandas:
Esto permitirá que todos sus núcleos de CPU calculen el resultado, por lo tanto, será mucho más rápido que las funciones de aplicación normales. Intenta avisarme si te resulta útil.
fuente
Permítanme probar un cálculo complejo usando datetime y considerando nulos o espacios vacíos. Estoy reduciendo 30 años en una columna de fecha y hora y utilizando el
apply
métodolambda
y la conversión del formato de fecha y hora. Lineif x != '' else x
se encargará de todos los espacios vacíos o nulos en consecuencia.fuente