/ / Jak mapować funkcję przy użyciu wielu kolumn w pandach? - python, pandy

Jak odwzorować funkcję za pomocą wielu kolumn w pandach? - python, pandy

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 1

Posł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ć.