Panda Dataframe Resampling basierend auf Spaltenkriterien

9

Ich möchte einen Datenrahmen resamplen, wenn Zelle in einer anderen Spalte meinen Kriterien entspricht

%Vor%

Für jeden Zeitstempel kann ich 2-10 Arten haben, und ich möchte korrekt neu berechnen, ohne NaN zu produzieren. Zur Zeit nehme ich den gesamten Datenrahmen mit dem folgenden Code auf und erhalte NaNs . Ich denke es liegt daran, dass ich mehrere Einträge für bestimmte Zeitstempel habe.

%Vor%

Eine Methode besteht darin, verschiedene Datenrahmen für jede Art zu erstellen, jeden Datenrahmen neu zu erfassen und die resultierenden Datenrahmen zu verbinden. Ich würde gerne herausfinden, ob es einen einfachen Weg gibt.

    
yusica 12.01.2017, 18:46
quelle

4 Antworten

2

Nachdem Sie Ihren Datenrahmen wie angegeben definiert haben, sollten Sie die Spalte timestamp zuerst in datetime umwandeln. Dann setze es als Index und schließlich Resampling und finde den Mittelwert wie folgt:

%Vor%

Dies würde den Mittelwert ausgeben, den Sie erwarten:

%Vor%

Und Ihr Datenrahmen würde ergeben:

%Vor%

Gruppierung nach Art

Wenn Sie nach Art gruppieren und den Mittelwert jeder Art erhalten möchten (bedeutet A und B), können Sie Folgendes tun:

%Vor%

Als Ergebnis erhalten Sie:

%Vor%

Und Ihr Datenrahmen würde schließlich wie folgt aussehen:

%Vor%     
Cedric Zoppolo 21.09.2017 14:52
quelle
0
%Vor%

Dies gibt einen Datenrahmen mit zwei Zeilen zurück, wie Sie es erwarten würden:

%Vor%

Ihre "Kind" -Spalte wird gelöscht, weil es keinen Sinn ergibt, Zeichen zu verwenden. Wenn Sie es beibehalten möchten, müssen Sie eine neue Regel einführen (z. B. das häufigste Zeichen für den angegebenen Zeitraum zuweisen).

    
binjip 19.09.2017 20:22
quelle
0

Erstens ist es besser, die Spalte 'timestamp' explizit in DatetimeIndex type zu konvertieren:

%Vor%

Bitte beachten Sie die geänderten Werte von B art. Jetzt, wenn Sie resampling mean() schätzt den neuen Wert als Durchschnitt von zwei bestehenden. Es kann vorkommen, dass mehr als ein neuer Datenpunkt zwischen den vorhandenen Datenpunkten liegt und pandas ihre Werte mit NaNs füllt. Sie können ffill() oder bfill() verwenden, abhängig davon, welche Seite des Zeitintervalls Sie schließen möchten. Standardmäßig ist es links, also ist bfill() die Wahl.

%Vor%

Es wird der letzte beobachtete Wert verwendet, um NaNs zu füllen.

Wenn Sie die Werte interpolieren möchten und nicht nur die Lücken füllen möchten, verwenden Sie transform(pd.Series.interpolate) combo. Der transform wendet interpolate() -Funktion auf jede Gruppe an. Versuchen Sie ein Resampling mit höherer Frequenz (zB 10 Sekunden), Sie werden den großen Unterschied zwischen zwei Ansätzen sehen.

%Vor%     
igrinis 19.09.2017 20:05
quelle
0

Setzen Sie den Zeitstempel auf datetime und verwenden Sie ihn dann als Index.

%Vor%

Beispiel aus Spalten Ihrer Wahl, zB: Beispiel aus Art A:

%Vor%

Beispiel und dann Berechnung:

%Vor%     
chrisckwong821 25.09.2017 05:09
quelle