python pandas dataframe python-3.5

python - Pandas: ¿Cómo puedo usar la función apply() para una sola columna?



dataframe python-3.5 (4)

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?


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 apply )

Esto es posible mediante la assign : es válido assign a columnas existentes, como dice la documentación (el énfasis es mío):

Asignar nuevas columnas a un DataFrame.

Devuelve un nuevo objeto con todas las columnas originales además de las nuevas. Las columnas existentes que se reasignan se sobrescribirán .

En breve:

In [1]: import pandas as pd In [2]: df = pd.DataFrame([{''a'': 15, ''b'': 15, ''c'': 5}, {''a'': 20, ''b'': 10, ''c'': 7}, {''a'': 25, ''b'': 30, ''c'': 9}]) In [3]: df.assign(a=lambda df: df.a / 2) Out[3]: a b c 0 7.5 15 5 1 10.0 10 7 2 12.5 30 9 In [4]: df Out[4]: a b c 0 15 15 5 1 20 10 7 2 25 30 9

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.


Dado un marco de datos de muestra df como:

a,b 1,2 2,3 3,4 4,5

lo que quieres es:

df[''a''] = df[''a''].apply(lambda x: x + 1)

eso devuelve:

a b 0 2 2 1 3 3 2 4 4 3 5 5


No necesitas una función en absoluto. Puede trabajar en una columna completa directamente.

Datos de ejemplo:

>>> df = pd.DataFrame({''a'': [100, 1000], ''b'': [200, 2000], ''c'': [300, 3000]}) >>> df a b c 0 100 200 300 1 1000 2000 3000

La mitad de todos los valores en la columna a :

>>> df.a = df.a / 2 >>> df a b c 0 50 200 300 1 500 2000 3000


Para una sola columna mejor usar map() , así:

df = pd.DataFrame([{''a'': 15, ''b'': 15, ''c'': 5}, {''a'': 20, ''b'': 10, ''c'': 7}, {''a'': 25, ''b'': 30, ''c'': 9}]) a b c 0 15 15 5 1 20 10 7 2 25 30 9 df[''a''] = df[''a''].map(lambda a: a / 2.) a b c 0 7.5 15 5 1 10.0 10 7 2 12.5 30 9