Comment grouper une série par valeurs dans pandas?

j'ai actuellement un pandas Series avec dtype Timestamp, et je veux le grouper par date (et avoir beaucoup de lignes avec des temps différents dans chaque groupe).

la façon apparemment évidente de faire cela serait quelque chose de similaire à

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

Toutefois, les pandas' groupby groupes série par son indice. Comment puis-je le faire Grouper par valeur à la place?

31
demandé sur Martín Fixman 2015-11-02 20:43:22

4 réponses

grouped = s.groupby(s)

Ou:

grouped = s.groupby(lambda x: s[x])
42
répondu luca 2018-08-27 13:30:51

Vous devriez le convertir en datagramme, puis Ajouter une colonne qui est la date(). Vous pouvez faire groupby sur le DataFrame avec la colonne date.

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

alors "date" devient votre index. Vous devez le faire de cette façon parce que l'objet final groupé a besoin d'un index pour que vous puissiez faire des choses comme sélectionner un groupe.

3
répondu mirthbottle 2016-01-14 02:28:36

Trois méthodes:

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

Série: sel.groupby(sel).size()

Série de DataFrame:

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

3
répondu Hangyu Liu 2017-02-08 13:44:51

Pour quelqu'un d'autre qui veut le faire inline sans jeter un lambda (qui a tendance à tuer la performance):

s.to_frame(0).groupby(0)[0]
1
répondu Andy Jones 2018-05-10 10:28:44