Seite 1 von 1

DataFrame Teilmenge

Verfasst: Dienstag 30. Juli 2019, 13:41
von Hias_L
Hallo zusammen,

fast habe ich mein Ziel schon selber erreicht. Leider etwas "unschön" aber ich stehe ja noch am Anfang!

Ich habe einen DataFrame (356, 22).
Diesen habe ich mit:

Code: Alles auswählen

df_Sort = df_1.sort_values(by=['Jahr', 'Rho_Summe'], ascending=[True, False])

innerhalb jeden Jahres sortiert.

Je Jahr gibt es ca. 73 Einträge.

Ich hätte gerne für jedes Jahr die Datensätze mit den 5 größten und 5 kleinsten Werten der Spalte Rho_Summe in einem neuen DataFrame.

Mit

Code: Alles auswählen

df_test = df_Sort.query('Jahr == 2014').head(5)
, bzw. tail(5) kann ich je ein Jahr "rausziehen".

Bestimmt gibt es eine elegantere Lösung ?

Vielen Dank für Eure Hilfe
Hias

Re: DataFrame Teilmenge

Verfasst: Dienstag 30. Juli 2019, 14:26
von __blackjack__
@Hias_L: Das klingt nach einem Fall für `groupby()`.

Re: DataFrame Teilmenge

Verfasst: Dienstag 30. Juli 2019, 14:48
von Hias_L
Vielen Dank schon einmal @__blackjack__

Groupby hätte ich jetzt z.B. so verstanden:

Code: Alles auswählen

df_gruppiert = df_Sort.groupby('Jahr').mean()
Aber wie kann ich mir mit groupby z.B. die 5 größten Werte für df_Sort('Rho_Summe') für jedes Jahr anzeigen lassen?

Re: DataFrame Teilmenge

Verfasst: Dienstag 30. Juli 2019, 16:37
von __blackjack__
@Hias_L: Na mit `head()`.

Re: DataFrame Teilmenge

Verfasst: Donnerstag 1. August 2019, 08:03
von Hias_L
Das ist ja unglaublich, was man mit groupby alles machen kann!

Habs hinbekommen:

Code: Alles auswählen

groupHead = df_Sort.groupby(['Jahr'])
df_Top5jeJahr = groupHeadTail.head(5)
Kann man head(5) und tail(5) in einem Schritt hinbekommen?

Re: DataFrame Teilmenge

Verfasst: Donnerstag 1. August 2019, 08:22
von Hias_L
Ist jetzt so gelöst:

Code: Alles auswählen

frames = [df_Top5jeJahr, df_Low5jeJahr]
df_Top5_Low5 = pd.concat(frames)

Re: DataFrame Teilmenge

Verfasst: Donnerstag 1. August 2019, 12:41
von __blackjack__
@Hias_L: `head()` und `tail()` kann man mit `nth()` und einer entsprechenden Liste von Indexwerten ersetzen, wenn man das in einem Schritt machen möchte.

Ich würde als Paranoiker vorher noch prüfen ob den auch alle Gruppen mindestens 10 Datensätze enthalten. Auch wenn das eigentlich nie anders sein dürfte – so ein kleines Sicherheitsnetz ist manchmal sinnvoll.

Re: DataFrame Teilmenge

Verfasst: Freitag 2. August 2019, 08:49
von Hias_L
Danke @__blackjack__ das mit 'nth()' schaue ich mir an!

Vieles findet man selber und es klappt, zumindest manchmal, dann tatsächlich.
Aber oft spart man mit den Hinweisen hier viel Zeit!

Was die Überprüfung betrifft zähle ich mich auch zu den Paranoikern. Aber trotzdem, der Hinweis ist immer wieder gut.