Ich kenne mich mit Pandas nicht aus. Mit Python schon.
Meine Vermutung ist, dass es mit Pandas noch viel einfacher sein könnte.
Mal angenommen du hast eine Liste mit datetime objekten.
Um ein paar zufällige Daten zu generieren, hab ich eine kleine Funktion geschrieben.
Code: Alles auswählen
import random
import datetime
def get_rnd_date():
while True:
year = 2018
month = random.randint(1, 12)
day = random.randint(1,31)
try:
date = datetime.datetime(year, month, day)
except ValueError:
continue
else:
return date
dates = [get_rnd_date() for _ in range(100)]
Nun hast du Beispieldaten in dates, unsortiert.
Um mit itertools.groupby zu arbeiten, muss die Liste zuerst sortiert werden.
Dann kann man nach 'month' gruppieren.
So wie die sorted Funktion, hat auch groupby ein Argument für key.
Der key gibt an, nach was sortiert, bzw. gruppiert werden soll.
Um lambda zu vermeiden, kann man operator verwenden.
Der attrgetter ist genau das was du brauchst, um auf Attribute der Klassen zuzugreifen.
Die Funktion liefert eine Funktion zurück, die als Argument das Objekt erwartet, auf dessen Attribut zugegriffen werden soll.
Code: Alles auswählen
from itertools import groupby
from operator import attrgetter
sorted_dates = sorted(dates)
grouped_dates = groupby(sorted_dates, key=attrgetter('month'))
Nun kannst du die Ergebnisse ausgeben:
Code: Alles auswählen
for month, grouped in grouped_dates:
last_day = list(grouped)[-1]
# oder alternativ argument unpacking
# *_, last = grouped
print('Month:', month, 'last_date', last_day)
Nicht vergessen, dass nach dieser for-Schleife grouped aufgebraucht ist.
Der Trick dabei ist, das gruppierte mit list zu "konsumieren" um dann daraus das letzte Element auszugeben.
Da die Liste immer noch sortiert ist, braucht man das nicht noch einmal zu tun.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server