2014-09-16 17 views
5

Mam tabelę, w której jedna z kolumn jest data powstawały (dataframe nie jest indeksowana według daty)Pandy data GroupBy zakres

Chcę grupy tabelę według daty, w której wszystkie elementy, które miały miejsce przed pewna data jest zgrupowana w jednym segmencie. Musiałoby to być kumulatywne, więc późniejsze segmenty będą zawierać wszystkie punkty danych z wcześniejszych.

Oto przedmiot daterange muszę grupy przez:

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

Oto przykład kilku punktów danych w tabeli:

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] 

Każde wejście byłoby bardzo mile widziane.

Dzięki

+0

To nie brzmi jak „grupa "(w sensie pandy) jest właściwym podejściem. Jest to operacja wzajemnie się wykluczająca. Co tak naprawdę próbujesz zrobić? Jeśli chcesz zagregować dowolną z kolumn, możesz rozważyć indeksowanie według daty, a następnie np. 'cumsum()' lub 'pd.rolling_apply()', aby uzyskać "działającą sumę" – Luciano

+0

Szukam filtrowania danych na podstawie określonych kryteriów. Jednym z tych kryteriów jest "od x data". Nie chce agregować danych. Nie wiedziałem, że pandy groupby wzajemnie się wykluczają - prawdopodobnie będą musiały skonfigurować pętle, aby ręcznie tworzyć podzbiory głównego stołu. – user3294195

+0

na tej podstawie, najpierw spróbowałbym odczytać dane z datą jako indeksem (zobacz argumenty 'index_col' i' parse_dates' z 'pd.read_csv()'), wtedy możesz zapętlić w prosty sposób: 'dla d w date_range: print (df_raw [: d]) ', który wydrukuje (pod) tablicę do aktualnej d. – Luciano

Odpowiedz

1

można utworzyć funkcję, która zwraca 1 jeżeli data jest w danym zakresie dat, które chcesz, a następnie użyć tego do grupy przez:

# 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

Dzięki ... Tak naprawdę chcę skonfigurować grupy na podstawie elementów z datą mniejszą niż każdy element w 'date_rng'. Tak wię c było jedno wiadro na element w 'date_rng'. – user3294195

+0

OK, rozumiem, nie sądzę, że możesz mieć takie zbiorcze grupy w pandach groupby. – yemu

Powiązane problemy