Ich versuche, einen Weg zu finden, um Werte aus verschiedenen Zeilen in einem Datenrahmen zu vergleichen, um eine neue Spalte zu berechnen.Berechne Zeilenwert in Bezug auf vorherige Zeilen in Panda Dataframe
- Iterate über Zeilen (Ich suche nach einer Lösung vektorisiert):
ich diese Möglichkeiten habe festgestellt,
for index, row in df.iterrows(): ....
- Merge die gleichen Datenrahmen Verwenden Sie eine Verschiebung über Index, etwa so:
d1 = data.shift() data.merge(d1[["value col"]], how="inner", left_index=True, right_index=True)
Gibt es eine Möglichkeit, um den aktuellen Datenrahmen von einer Anwendung Methode zuzugreifen:
dataframe.apply(myfunction(row),axis=1)
def my_function(row, current_dataframe)
index = row.name
row_to_compare = current_dataframe.iloc[index-delta]
row["new column"] = calc(row["value], row_to_compare["value"])
return row
es als Argument übergeben scheint nicht zu funktionieren:
data.apply(date_diff,axis=1,args=(data))
or
data.apply(lambda row,df: date_diff(row, df),axis=1,args=(data))
sagte immer wieder:
> ValueError: The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all()
Gibt es einen Weg zu machen es funktioniert?
Vielen Dank.
Es ist im Grunde ein abgeleiteter Begriff basierend auf verschiedenen Spalten, wie Sie darauf hinweisen, kann einfach mit shift() -Methode getan werden, aber ich frage mich, ob es in eine Funktion kompiliert werden kann, um den Code lesbarer zu machen. – kothvandir
Natürlich können Sie in einer Anwendungsfunktion alles tun, was Sie wollen. Es wird jedoch massiv langsamer sein. – simon