2015-11-02 23 views
22

Obecnie mam pandę Series z dtype Timestamp i chcę pogrupować ją według daty (i mieć wiele wierszy z różnymi czasami w każdej grupie).Jak pogrupować serie według wartości w pandach?

Pozornie oczywiste sposobem osiągnięcia tego celu byłoby coś podobnego do

grouped = s.groupby(lambda x: x.date()) 

Jednak pandy groupby grupy Series by jej indeks. Jak mogę zamiast tego utworzyć grupę według wartości?

+1

IIUC nie 'pogrupowane = s.groupby (s.dt.date)' praca? co próbujesz osiągnąć – EdChum

+0

http://stackoverflow.com/questions/17929426/groupby-for-pandas-series-not-working – luca

Odpowiedz

3

Należy przekształcić go w DataFrame, a następnie dodać kolumnę, która jest datą(). Możesz zrobić groupby na DataFrame z kolumną daty.

df = pandas.DataFrame(s, columns=["datetime"]) 
df["date"] = df["datetime"].apply(lambda x: x.date()) 
df.groupby("date") 

Następnie "data" staje się indeksem. Trzeba to zrobić w ten sposób, ponieważ końcowy zgrupowany obiekt potrzebuje indeksu, dzięki czemu można robić rzeczy takie jak select a group.

29

Używam tego do grouby Series jej wartości:

grouped = s.groupby(s) 

czyli

grouped = s.groupby(lambda x: s[x]) 
+0

Tak prosty ... Dzięki :) –

0

trzech metod:

DataFrame: pd.groupby(['column']).size()

Seria: sel.groupby(sel).size()

Series do DataFrame:

pd.DataFrame(sel, columns=['column']).groupby(['column']).size()