2016-01-23 17 views
55

Mam ramkę danych pandy z dwiema kolumnami. Muszę zmienić wartości pierwszej kolumny bez wpływu na drugą i wrócić do całej ramki danych z tylko pierwszymi wartościami kolumn. Jak mogę to zrobić, stosując podanie w pandach?Pandy: Jak mogę użyć funkcji apply() dla pojedynczej kolumny?

+3

Należy zakładać przykładowe dane wejściowe i żądanej mocy. –

+0

Powinieneś prawie nigdy nie używać 'apply' w takiej sytuacji. Zamiast tego użyj bezpośrednio kolumny. –

Odpowiedz

107

Biorąc pod uwagę dataframe przykładowy df jak:

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

co chcesz to:

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

która zwraca:

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

'apply' nie powinien nigdy być używany w sytuacji takiej jak ta –

+1

@TedPetrou masz całkowitą rację, to był tylko przykład na to, jak zastosować ogólną funkcję w jednej kolumnie, jak zadawał OP. –

7

Dla pojedynczej kolumny lepiej użyć map(), jak to:

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

Dlaczego 'map()' jest lepsze niż 'apply()' dla pojedynczej kolumny? – ChaimG

+2

Myślę, że powinno to być "lambda a: a/2.". –

17

Nie potrzebujesz w ogóle funkcji. Możesz pracować bezpośrednio na całej kolumnie.

Przykład Dane:

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

     a  b  c 
0 100 200 300 
1 1000 2000 3000 

pół wszystkie wartości w kolumnie a:

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

    a  b  c 
0 50 200 300 
1 500 2000 3000