Ich führe eine Operation für jede Spalte eines DataFrame
durch, die nach Wochen indiziert ist.. In jeder Spalte zähle ich nämlich das erste Vorkommen, bei dem ein Eintrag nicht gleich dem vorherigen Eintrag ist (ohne den ersten Eintrag), und gebe die Differenz zwischen dem letzten Zeitraum und dem Zeitraum, in dem dies aufgetreten ist, aus.Effizientes Verschieben der Zählung auf einen DataFrame
Das Problem ist, dass dies sehr langsam ist und ich bin mir nicht sicher, wie es zu rationalisieren, möglicherweise unter Verwendung numpy
. Hier ist mein Code:
def sh(ser):
if ser.drop_duplicates().shape[0]==1:
return np.nan
s = (ser!=ser.shift())[1:]
a=s[s].index[0]
b=s.index[-1]
c = - (a-b)
return c.days/7 + 1
cols = prices.columns
timeDiffs = []
for col in cols:
ser = prices[col]
timeDiffs.append(sh(ser))
output = pd.Series(timeDiffs)
Um eine Vorstellung davon zu bekommen, was das bedeutet, wenn `df ist die folgende:
0 1 2
index
2015-11-15 9 15.0 8
2015-11-22 9 15.0 8
2015-11-28 3.2 15.0 8
2015-12-06 3.2 15.0 8
2015-12-13 4 15.0 8
2015-12-20 5 15.0 2
Die output
ist:
4
nan
1
Danke, aber das ergibt [3, nan, 1] anstelle von [4, nan, 1] für das obige Beispiel – splinter
Wie ist die erste Spalte gleich 4? –
, weil so viele Beobachtungen in der Spalte verbleiben, beginnend mit der ersten Periode, in der eine Änderung stattgefunden hat (und sie eingeschlossen hat). Beachten Sie die 'return c.days/7 + 1' im Code. – splinter