Ich möchte eine neue Spalte in einem pandas
Datenrahmen erstellen, indem ich eine Funktion auf zwei vorhandene Spalten anwende. Nach dieser Antwort konnte ich eine neue Spalte erstellen, wenn ich nur eine Spalte als Argument benötige:
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)
Ich kann jedoch nicht herausfinden, wie ich dasselbe tun soll, wenn die Funktion mehrere Argumente erfordert. Wie erstelle ich beispielsweise eine neue Spalte, indem ich Spalte A und Spalte B an die folgende Funktion übergebe?
def fxy(x, y):
return x * y
np.vectorize()
ist erstaunlich schnell. Danke dir.np.vectorize
es nicht funktioniert. Der Grund ist, dass eine der Spalten vom Typ istpandas._libs.tslibs.timestamps.Timestamp
, dernumpy.datetime64
durch die Vektorisierung in den Typ umgewandelt wird. Die beiden Typen sind nicht austauschbar, wodurch sich die Funktion schlecht verhält. Irgendwelche Vorschläge dazu? (Anders als.apply
dies anscheinend zu vermeiden ist)Sie können mit dem Beispiel @greenAfrican fortfahren, wenn Sie Ihre Funktion neu schreiben können. Wenn Sie Ihre Funktion jedoch nicht neu schreiben möchten, können Sie sie wie folgt in eine anonyme Funktion in apply einbinden:
quelle
Dies löst das Problem:
Sie könnten auch tun:
quelle
Wenn Sie mehrere Spalten gleichzeitig erstellen müssen :
Erstellen Sie den Datenrahmen:
Erstellen Sie die Funktion:
Weisen Sie die neuen Spalten zu:
quelle
Noch eine saubere Syntax im Diktatstil:
oder,
quelle