2016-01-23 9 views
55

Ho un frame dati panda con due colonne. Ho bisogno di cambiare i valori della prima colonna senza influenzare la seconda e recuperare l'intero frame di dati con i soli valori della prima colonna modificati. Come posso farlo usando apply in panda?Panda: come posso utilizzare la funzione apply() per una singola colonna?

+3

invio prego alcuni dati campione di ingresso e uscita desiderata. –

+0

Non dovresti quasi mai usare 'apply' in una situazione come questa. Operare direttamente sulla colonna. –

risposta

107

Dato un campione dataframe df come:

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

quello che vuoi è:

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

che restituisce:

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

'apply' non dovrebbe mai essere usato in una situazione come questa –

+1

@TedPetrou hai perfettamente ragione, era solo un esempio su come applicare una funzione generale su una singola colonna, come richiesto dall'OP. –

7

Per una singola colonna meglio usare map(), come questo:

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 
+24

Perché 'map()' è migliore di 'apply()' per una singola colonna? – ChaimG

+2

Penso che dovrebbe essere 'lambda a: a/2.' invece. –

17

Non è necessaria alcuna funzione. Puoi lavorare direttamente su un'intera colonna.

dati Esempio:

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

     a  b  c 
0 100 200 300 
1 1000 2000 3000 

Metà tutti i valori nella colonna a:

>>> df.a = df.a/2 
>>> df 

    a  b  c 
0 50 200 300 
1 500 2000 3000 
Problemi correlati