2014-09-16 17 views
5

I eine Tabelle, wo eine der Spalt den Zeitpunkt des Auftretens (der Datenrahmen nicht nach Datum indiziert ist)Pandas groupby Datumsbereich

Ich mag, die Tabelle nach Datum Gruppe, wobei alle Elemente, die von einem vorherigen aufgetreten bestimmtes Datum wird in einen Eimer gruppiert. Dies müsste kumulativ sein, sodass spätere Buckets alle Datenpunkte aus früheren einschließen.

Hier ist das Objekt, das ich daterange zum Gruppieren von:

date_rng = date_range('28/02/2010','31/08/2014',freq='3M') 

Hier ist ein Beispiel von wenigen Datenpunkten in der Tabelle ist:

df_raw.head() 
    Ticker FY Periodicity Measure  Val    Date 
0 BP9DL90 2009   ANN  CPX 1000.00 2008-03-31 00:00:00 
1 BP9DL90 2010   ANN  CPX 600.00 2009-03-25 00:00:00 
2 BP9DL90 2010   ANN  CPX 600.00 2009-09-16 00:00:00 
3 BP9DL90 2011   ANN  CPX 570.00 2010-03-17 00:00:00 
4 BP9DL90 2011   ANN  GRM 57.09 2010-09-06 00:00:00 

[5 rows x 6 columns] 

Jede Eingabe wäre sehr willkommen.

Dank

+0

Es klingt nicht wie ‚Gruppierung "(im Pandas-Sinn) ist hier der richtige Ansatz. Das ist eine sich gegenseitig ausschließende Operation. Was versuchst du eigentlich? Wenn Sie eine der Spalten aggregieren möchten, können Sie eine Indexierung nach dem Datum und dann z. 'cumsum()' oder 'pd.rolling_apply()', um eine 'laufende Summe' zu erhalten – Luciano

+0

Ich möchte Daten anhand bestimmter Kriterien filtern. Eines dieser Kriterien ist "ab x Datum". Nicht um die Daten zu aggregieren. Ich wusste nicht, dass pandas groupby sich gegenseitig ausschließen würde - wahrscheinlich müssen Schleifen eingerichtet werden, um Teilmengen der Haupttabelle manuell zu erstellen. – user3294195

+0

basierend darauf würde ich zuerst versuchen, die Daten mit Datum als Index zu lesen (siehe 'index_col' und' parse_dates' Argumente von 'pd.read_csv()'), dann können Sie einfach wie folgt eine Schleife machen: 'for d in date_range: print (df_raw [: d]) 'welches die (Teil-) Tabelle bis zum heutigen Tag ausdruckt d. – Luciano

Antwort

1

Sie eine Funktion erstellen können, die 1, wenn das Datum im Bereich Datum ist zurück Sie wollen, und dann wird diese von der Gruppe verwenden:

# convert date column do datetime type 
df['Date']=pd.to_datetime(df['DATE']), format='%d-%m-%Y %H:%M:%S' 

def is_in_range(x): 
    if x['Date'] > '28-02-2010 00:00:00' and x['Date'] < '31-08-2014 00:00:00': 
     return 1 
    else: 
     return 0 

data.groupby(df['date'].map(is_in_range)) 
+0

Danke ... Ich bin wirklich auf der Suche nach Gruppen basierend auf Elementen mit Datum weniger als jedes Element in "date_rng" einrichten. Es würde also einen Eimer pro Element in "date_rng" geben. – user3294195

+0

OK, ich verstehe, ich glaube nicht, dass Sie solche Gruppen in Pandas gruppieren können. – yemu