Chcę utworzyć nową kolumnę w pandas
ramce danych, stosując funkcję do dwóch istniejących kolumn. Po tej odpowiedzi udało mi się utworzyć nową kolumnę, gdy potrzebuję tylko jednej kolumny jako argumentu:
import pandas as pd
df = pd.DataFrame({"A": [10,20,30], "B": [20, 30, 10]})
def fx(x):
return x * x
print(df)
df['newcolumn'] = df.A.apply(fx)
print(df)
Jednak nie mogę dowiedzieć się, jak zrobić to samo, gdy funkcja wymaga wielu argumentów. Na przykład, jak utworzyć nową kolumnę, przekazując kolumnę A i kolumnę B do poniższej funkcji?
def fxy(x, y):
return x * y
np.vectorize()
jest niezwykle szybka. Dziękuję Ci.np.vectorize
nie działa. Powodem jest to, że jedna z kolumn jest typupandas._libs.tslibs.timestamps.Timestamp
, który zostaje przekształcony w typnumpy.datetime64
przez wektoryzację. Te dwa typy nie są zamienne, co powoduje, że funkcja działa źle. Jakieś sugestie w tej sprawie? (Poza.apply
tym, że najwyraźniej należy tego unikać)Możesz skorzystać z przykładu @greenAfrican, jeśli możesz przepisać swoją funkcję. Ale jeśli nie chcesz przepisać swojej funkcji, możesz zawinąć ją w anonimową funkcję wewnątrz Apply, na przykład:
źródło
To rozwiązuje problem:
Możesz też:
źródło
Jeśli chcesz utworzyć wiele kolumn jednocześnie :
Utwórz ramkę danych:
Utwórz funkcję:
Przypisz nowe kolumny:
źródło
Jeszcze jedna czysta składnia w stylu dyktowania:
lub,
źródło