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.
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.
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:
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%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).
Erstens ist es besser, die Spalte 'timestamp'
explizit in DatetimeIndex
type zu konvertieren:
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.
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.
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%Tags und Links python pandas dataframe resampling