Ich habe einen ziemlich anspruchsvollen Vorhersage-Code mit über 20 Spalten und Millionen von Daten pro Spalte mit wls. Jetzt benutze ich Iterrow, um Daten zu durchlaufen, und dann basierend auf diesen Daten und Werten in diesen Daten verschiedene Größen von Daten für die Berechnung zu extrahieren. es dauert Stunden in meiner Produktion laufen, ich den Code in das folgende vereinfachen:Wie vektorisieren Pandas Berechnung, die auf letzten x Zeilen von Daten basiert ist
import pandas as pd
import numpy as np
from datetime import timedelta
df=pd.DataFrame(np.random.randn(1000,2), columns=list('AB'))
df['dte'] = pd.date_range('9/1/2014', periods=1000, freq='D')
def calculateC(A, dte):
if A>0: #based on values has different cutoff length for trend prediction
depth=10
else:
depth=20
lastyear=(dte-timedelta(days=365))
df2=df[df.dte<lastyear].head(depth) #use last year same date data for basis of prediction
return df2.B.mean() #uses WLS in my model but for simplification replace with mean
for index, row in df.iterrows():
if index>365:
df.loc[index,'C']=calculateC(row.A, row.dte)
ich gelesen, dass iterrow die Hauptursache ist, weil es keine wirksame Methode ist Pandas zu verwenden, und ich sollte Vektor Methoden. Jedoch kann ich nicht in der Lage sein, basierend auf Bedingungen (Daten, unterschiedliche Länge und Wertebereich) einen Weg zum Vektor zu finden. Gibt es einen Weg?
Ich weiß, das ist eine alte Frage, aber für was es sich lohnt 'itituples()' ist merklich schneller als 'iterrows()'. – shadowtalker