2015-11-02 7 views
22

Ich habe derzeit einen Pandas Series mit dtype Timestamp, und ich möchte es nach Datum gruppieren (und viele Zeilen mit unterschiedlichen Zeiten in jeder Gruppe haben).Wie gruppiere ich eine Serie nach Werten in Pandas?

Die scheinbar offensichtliche Art und Weise, dies zu tun jedoch etwas Ähnliches wie

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

wäre, Pandas groupby Gruppen-Reihe durch seinen Index. Wie kann ich die Gruppe stattdessen nach Wert gruppieren?

+1

IIUC nicht 'gruppiert = s.groupby (s.dt.date)' Arbeit? was willst du erreichen – EdChum

+0

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

Antwort

3

Sie sollten es in einen DataFrame konvertieren und dann eine Spalte hinzufügen, die das Datum() ist. Sie können groupby auf dem DataFrame mit der Datumsspalte ausführen.

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

Dann wird "Datum" zu Ihrem Index. Sie müssen es auf diese Weise tun, da das letzte gruppierte Objekt einen Index benötigt, damit Sie Dinge wie select a group tun können.

29

Ich benutze dies eine Serie von seinen Werten grouby:

grouped = s.groupby(s) 

Oder:

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

So einfach ... Danke :) –

0

drei Methoden:

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

Serie: sel.groupby(sel).size()

Datenrahmen 10

Serie:

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