Betrachten Sie eine CSV-Datei:
string,date,number
a string,2/5/11 9:16am,1.0
a string,3/5/11 10:44pm,2.0
a string,4/22/11 12:07pm,3.0
a string,4/22/11 12:10pm,4.0
a string,4/29/11 11:59am,1.0
a string,5/2/11 1:41pm,2.0
a string,5/2/11 2:02pm,3.0
a string,5/2/11 2:56pm,4.0
a string,5/2/11 3:00pm,5.0
a string,5/2/14 3:02pm,6.0
a string,5/2/14 3:18pm,7.0
Ich kann dies einlesen und die Datumsspalte in das Datum / Uhrzeit-Format umformatieren:
b=pd.read_csv('b.dat')
b['date']=pd.to_datetime(b['date'],format='%m/%d/%y %I:%M%p')
Ich habe versucht, die Daten nach Monat zu gruppieren. Es scheint, dass es eine offensichtliche Möglichkeit geben sollte, auf den Monat zuzugreifen und danach zu gruppieren. Aber ich kann es nicht scheinen. Weiß jemand wie?
Was ich derzeit versuche, ist die Neuindizierung nach Datum:
b.index=b['date']
Ich kann wie folgt auf den Monat zugreifen:
b.index.month
Ich kann jedoch keine Funktion finden, die sich monatlich zusammenfasst.
python
pandas
datetime
pandas-groupby
atomh33ls
quelle
quelle
resample
(wenn es die Funktionalität bietet, die Sie benötigen) oder zu verwendenTimeGrouper
:df.groupby(pd.TimeGrouper(freq='M'))
df.groupby(pd.TimeGrouper(freq='M')).sum()
oderdf.groupby(pd.TimeGrouper(freq='M')).mean()
pd.TimeGrouper
wurde zugunsten von abgelehntpd.Grouper
, was etwas flexibler ist, aber immer noch nimmtfreq
undlevel
argumentiert.to_datetime
.b
nach dem Lesen aus der CSV ein Index angegeben wird.b.index = pd.to_datetime(b['date'],format='%m/%d/%y %I:%M%p')
Nach der Zeile hinzufügenb = pd.read_csv('b.dat')
. [Ich habe die Antwort gerade auch bearbeitet.](Update: 2018)
Beachten Sie, dass dies
pd.Timegrouper
abgeschrieben wird und entfernt wird. Verwenden Sie stattdessen:quelle
freq=...
) hier . Einige Beispiele sindfreq=D
für Tage ,freq=B
für Werktage ,freq=W
für Wochen oder sogarfreq=Q
für Viertel .Eine Lösung, die MultiIndex vermeidet, besteht darin, eine neue zu erstellen
datetime
Spalteneinstellungstag = 1 Gruppieren Sie dann nach dieser Spalte. Triviales Beispiel unten.Der subtile Vorteil dieser Lösung besteht darin, dass
pd.Grouper
der Grouper-Index im Gegensatz zum Anfang normalisiert wird eines jeden Monats und nicht zum Ende des Monats Daher können Sie Gruppen einfach extrahieren überget_group
:Die Berechnung des letzten Oktobertages ist etwas umständlicher.
pd.Grouper
Ab Version 0.23 wird zwar einconvention
Parameter unterstützt, dies gilt jedoch nur für einenPeriodIndex
Grouper.quelle
Etwas alternative Lösung zu @ jpps, aber Ausgabe eines
YearMonth
Strings:quelle