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?
grouped = s.groupby(s)
Ou:
grouped = s.groupby(lambda x: s[x])
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]
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 .
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()
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)