web-dev-qa-db-fra.com

Comment regrouper une série par valeurs dans des pandas?

J'ai actuellement un pandas Series avec dtype Timestamp, et je souhaite le regrouper par date (et plusieurs rangées avec des heures différentes dans chaque groupe).

La manière apparemment évidente de le faire serait quelque chose de similaire à

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

Cependant, les groupes groupby des pandas sont classés par leur index. Comment puis-je le faire groupe par valeur à la place?

47
Martín Fixman
grouped = s.groupby(s)

Ou:

grouped = s.groupby(lambda x: s[x])
71
luca

Pour ceux qui veulent faire cela en ligne sans ajouter de lambda (ce qui a tendance à tuer les performances):

s.to_frame(0).groupby(0)[0]
6
Andy Jones

Vous devriez le convertir en un DataFrame, puis ajouter une colonne qui est la date (). Vous pouvez grouper sur le DataFrame avec la colonne de 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 car l'objet final groupé a besoin d'un index pour pouvoir faire des choses comme sélectionner un groupe .

3
mirthbottle

Trois méthodes:

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

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

Série vers DataFrame:

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

3
Hangyu Liu

Pour ajouter une autre suggestion, j’utilise souvent ce qui suit, car elle utilise une logique simple:

pd.Series(index=s.values).groupby(level=0)
0
mchl_k