2016-07-14 10 views
3

Ich habe ein DataFrame Objekt, das von datetime indiziert wird. Lassen Sie uns sagen, mein Objekt sieht wie folgt aus:Den Durchschnitt der Datenframesspalte nur bis zum Ende des Tages finden (Datum-Zeit-Index)

DateTime    A 
2016-07-01 08:30:00 5 
2016-07-01 09:28:17 6 
2016-07-01 14:09:11 9 
2016-07-01 22:33:44 10 
2016-07-02 08:30:00 20 
2016-07-02 15:00:00 30 

ich eine neue Spalte machen möchten, die den Mittelwert der Spalte A nur aus Datenpunkten (Zeilen), die einen Zeitstempel haben bis zum Ende des Tages berechnet hat. In diesem Beispiel würde die resultierende Datenrahmen Objekt wie folgt aussehen:

DateTime    A B 
2016-07-01 08:30:00 5 7.5 
2016-07-01 09:28:17 6 8.33333 
2016-07-01 14:09:11 9 9.5 
2016-07-01 22:33:44 10 10 
2016-07-02 08:30:00 20 25 
2016-07-02 15:00:00 30 30 

Ich dachte, haben eine eigene Spalte zu machen, das Ende des Tages zu bekommen, in Scheiben schneiden die Daten durch die Zeit (df['A'].loc[df['DateTime']:df['end_of_day']].mean()), aber ich habe, dass Sie gefunden kann die Daten nicht basierend auf einer Reihe von Daten variabel teilen. Hat jemand irgendwelche effizienten Möglichkeiten, dies zu tun?

Vielen Dank im Voraus!

Antwort

1

Erstellen Sie eine benutzerdefinierte Funktion apply mit

def nowTilEODMean(d): 
    cond1 = df.index >= d.name 
    cond2 = df.index.day == d.name.day 
    return df.A.loc[cond1 & cond2].mean() 

df['B'] = df.apply(nowTilEODMean, axis=1) 
df 

enter image description here

Verwandte Themen