2016-07-15 15 views
1

Ich versuche, Werte aus einer Zeitreihe (stündliche und subhourly Temperaturwerte) innerhalb eines Zeitfensters bin. Das heißt, von ursprünglichen Stundenwerten möchte ich bined Werte auf einer täglichen, wöchentlichen oder monatlichen Basis extrahieren. Ich habe versucht, groupby + TimeGrouper(" ") mit pd.cut zu kombinieren, mit schlechten Ergebnissen.Doppelte Gruppierung von Daten nach Bins UND Zeit mit Pandas

Ich bin auf eine nette Funktion von diesem tutorial gestoßen, der vorschlägt, die Daten zuzuordnen (assoziierend zu jedem Wert mit seinem abgebildeten Bereich in der nächsten Spalte) und dann entsprechend gruppieren.

def map_bin(x, bins): 
    kwargs = {} 
    if x == max(bins): 
     kwargs['right'] = True 
    bin = bins[np.digitize([x], bins, **kwargs)[0]] 
    bin_lower = bins[np.digitize([x], bins, **kwargs)[0]-1] 
    return '[{0}-{1}]'.format(bin_lower, bin) 

df['Binned'] = df['temp'].apply(map_bin, bins=freq_bins) 

jedoch in einer Indexerror diese Funktion Ergebnisse der Anwendung: index n ist außerhalb der Grenzen für die Achse 0 mit der Größe n.

Idealerweise möchte ich das funktionieren lassen und es anwenden, um gleichzeitig eine doppelte Gruppierung zu erreichen: eins nach Bins und eins nach Timegrouper.

Antwort

2

Update:
Es scheint, dass mein früherer Versuch Probleme verursacht wurde, weil die Doppel indizierten Spalten. Ich habe mich zu etwas vereinfacht, das viel besser zu funktionieren scheint.

import pandas as pd 
import numpy as np 
xaxis = np.linspace(0,50) 
temps = pd.Series(data=xaxis,name='temps') 
times = pd.date_range(start='2015-07-15',periods=50,freq='6H') 
temps.index = times 

bins = [0,10,20,30,40,50] 

temps.resample('W').agg(lambda series:pd.value_counts(pd.cut(series,bins),sort=False)).unstack() 

Diese Ausgänge:

  (0, 10] (10, 20] (20, 30] (30, 40] (40, 50] 
2015-07-19  9  10   0   0   0 
2015-07-26  0   0   10   10   8 
2015-08-02  0   0   0   0   2 
+0

Alton, würde ich beide von Bins Gruppe gerne und von Tag/Woche, zugleich – Andreuccio

+0

Also, wenn ich das richtig verstehe, wollen Sie alle Messungen aus dem gleichen Zeit gemittelt werden und dann diese nach Tag, Woche und Monat gruppieren? –

+1

ha, das wäre zu einfach !! Angenommen, ich habe einen Sensor, der in stündlichen Intervallen eine Raumtemperatur aufzeichnet (es ist tatsächlich 10/15 Minuten, aber ich habe es in Pandas neu abgetastet). Also mein df ist sehr einfach: erste Spalte: Zeitstempel (indiziert), zweite Spalte: Temperatur Wenn meine bins waren [20, 22,24,26,28,30], würde ich gerne die Daten in solchen gruppieren eine Art, dass ich weiß, wie viele Datenpunkte (dh wie viele stündliche Temperaturwerte) in den 20 <<22, wie viele 22 <<24 etc. für jeden Tag und für jede Woche waren. Macht das Sinn? – Andreuccio

Verwandte Themen