Sortieren ein pandas dataframe ist Serie von Monats-Namen?

Habe ich eine Reihe Objekt:

    date   price
    dec      12
    may      15
    apr      13
    ..

Anweisung Problem: ich es machen will, erscheinen nach Monat und berechnen Sie den Mittelwert der Preis pro Monat und präsentieren es mit einer geordneten Art und Weise nach Monat.

Gewünschte Ausgabe:

 month mean_price
  Jan    XXX
  Feb    XXX
  Mar    XXX

Dachte ich, eine Liste und übergeben es in eine Art Funktion:

months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]

aber die sort_values nicht unterstützt, die für die Serie.

Einem großen problem, das ich habe, ist, dass, obwohl

df = df.sort_values(by='date',ascending=True,inplace=True) funktioniert
der erste df aber nachdem ich Tat ein groupby es nicht halten Sie die Reihenfolge aus den sortierten df.

Zu dem Schluss, die ich brauchte, die anfänglichen Daten im Rahmen dieser beiden Spalten. Sortiert die datetime-Spalte ist und durch eine groupby mit dem Monat (dt.strftime('%B')) die Sortierung kam Durcheinander. Jetzt muss ich es Sortieren nach Monat name.


Mein code:

df # has 5 columns though I need the column 'date' and 'price'

df.sort_values(by='date',inplace=True) #at this part it is sorted according to date, great
total=(df.groupby(df['date'].dt.strftime('%B'))['price'].mean()) # Though now it is not as it was but instead the months appear alphabetically
  • Haben Sie versucht df.sort_values(by='Date_col', inplace=True), wie die Antworten auf diese Frage zeigen?
  • ja, ich vergaß, es zu erwähnen. Das problem verschärft sich, nachdem die Gruppe durch.Es wird nur alphabetisch nach dass.
  • Okay, haben Sie versucht, die Anweisungen in die Antwort auf die Sortierung innerhalb dataframe Gruppen?
  • die Anwesenheit von datetime benötigt, um sich von Monat in meinem Beispiel macht es schwer zu realisieren
  • Wie über die Zuordnung der ersten Spalte einer Reihe von Indizes (also für jeden Monat speichern, was index es ist in der months array, anstatt des name-string), und Sortieren dann diese zahlen?
  • Versuchen groupby(df['date'])['price'].mean()) in Ihrer letzten Zeile.
  • du meinst, entfernen Sie die dt.strftime('%B')? es funktioniert nicht
  • Es ist mir nicht ganz klar, was Ihre Daten tatsächlich aussieht (und Datentypen), aber wenn Sie die original-dataframe und es hat eine datetime-Spalte ist, sollten Sie in der Lage, sehr einfach tun: df.resample('M').mean() (dies setzt Voraus, die datetime-col wird als set-index und der Preis ist das einzige, col).

InformationsquelleAutor J_p | 2017-12-31
Schreibe einen Kommentar