Sprawdziłem mapę, zastosowałem, mapaply i połączyłem, ale nie mogę znaleźć prostego sposobu na wykonanie następujących czynności:
Mam ramkę danych z 10 kolumnami. Muszę przekazać trzy z nich do funkcji, która pobiera skalary i zwraca skalar ...
some_func(int a, int b, int c) returns int d
Chcę to zastosować i utworzyć nową kolumnę w ramce danych z wynikiem.
df["d"] = some_func(a = df["a"], b = df["b"], c = df["c"])
Wszystkie rozwiązania, które znalazłem, wydają się sugerowaćprzepisać some_func do pracy z Serią zamiast skalarami, ale nie jest to możliwe, ponieważ jest częścią innego pakietu. Jak elegancko zrobić powyższe?
Odpowiedzi:
13 dla odpowiedzi nr 1Posługiwać się pd.DataFrame.apply()
, jak poniżej:
df["d"] = df.apply(lambda x: some_func(a = x["a"], b = x["b"], c = x["c"]), axis=1)
UWAGA: Tak @ishishsingal zapytany o kolumny axis
argument powinien mieć wartość 1, ponieważ domyślnie wynosi 0 (jak w dokumentacja i skopiowane poniżej).
oś: {0 lub „indeks”, 1 lub „kolumny”}, domyślnie 0
- 0 lub „indeks”: zastosuj funkcję do każdej kolumny
- lub „kolumny”: zastosuj funkcję do każdego wiersza
4 dla odpowiedzi nr 2
Używam następujących:
df["d"] = df.apply(lambda x: some_func(a = x["a"], b = x["b"], c = x["c"]))
Wydaje się, że działa dobrze, ale jeśli ktoś inny ma lepsze rozwiązanie, daj mi znać.