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?
Odpowiedz
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
'apply' nie powinien nigdy być używany w sytuacji takiej jak ta –
@TedPetrou masz całkowitą rację, to był tylko przykład na to, jak zastosować ogólną funkcję w jednej kolumnie, jak zadawał OP. –
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
Dlaczego 'map()' jest lepsze niż 'apply()' dla pojedynczej kolumny? – ChaimG
Myślę, że powinno to być "lambda a: a/2.". –
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
Należy zakładać przykładowe dane wejściowe i żądanej mocy. –
Powinieneś prawie nigdy nie używać 'apply' w takiej sytuacji. Zamiast tego użyj bezpośrednio kolumny. –