Pandas DataFrame: Durchschnitt von Spalten mit entsprechender ID erstellen

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
seiko2020
User
Beiträge: 2
Registriert: Sonntag 27. Dezember 2020, 12:52

Moin zusammen,

ich habe folgendes Problem. Ich habe ein DataFrame mit mehreren ID's pro Zeile, etwa so:

Code: Alles auswählen

data_test = {'ID': [1,1,1,2,2,2,3,3,3],
            'year': [2000,2001,2001,2005,2004,2008,2002,2006,2010],
            'pop': [1.5,1.7,2.4,3,3.2,3.3,5,8,8.2]}
frame_test = pd.DataFrame(data_test)
Nun möchte ich für jede ID den Durchschnitt bilden und in einem neuen DataFrame ausgeben lassen. Dazu habe ich folgenden Befehl verwendet:

Code: Alles auswählen

frame_test["pop"].mean()
Dieser gibt mir allerdings den Durchschnitt für die gesamte Datenmenge an. Mein Ziel ist es am ende ein DataFrame zu erhalten, das etwa so aussieht:

ID_1 - Durchschnitt_year - Durchschnitt_pop
ID_2 - Durchschnitt_year - Durchschnitt_pop
ID_3 - Durchschnitt_year - Durchschnitt_pop

Vielen Dank im Voraus und beste Grüße
Benutzeravatar
__blackjack__
User
Beiträge: 13163
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@seiko2020: Du suchst die `groupby()`- und die `agg()`-Methode:

Code: Alles auswählen

 In [398]: frame_test                                                            
Out[398]: 
   ID  year  pop
0   1  2000  1.5
1   1  2001  1.7
2   1  2001  2.4
3   2  2005  3.0
4   2  2004  3.2
5   2  2008  3.3
6   3  2002  5.0
7   3  2006  8.0
8   3  2010  8.2

In [399]: frame_test.groupby("ID").agg({"pop": "mean"})                         
Out[399]: 
         pop
ID          
1   1.866667
2   3.166667
3   7.066667
“There will always be things we wish to say in our programs that in all known languages can only be said poorly.” — Alan J. Perlis
naheliegend
User
Beiträge: 439
Registriert: Mittwoch 8. August 2018, 16:42

__backjack__: "Jemand der VB oder PHP kann, der also was Programmieren angeht irgendwo im negativen Bereich liegt (...)"
Benutzeravatar
__blackjack__
User
Beiträge: 13163
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@naheliegend: Da kommt dann das hier:

Code: Alles auswählen

In [400]: frame_test.groupby("ID").mean()                                       
Out[400]: 
           year       pop
ID                       
1   2000.666667  1.866667
2   2005.666667  3.166667
3   2006.000000  7.066667
Ich weiss nicht ob der Mittelwert der Jahreszahlen wirklich sinnvoll ist.
“There will always be things we wish to say in our programs that in all known languages can only be said poorly.” — Alan J. Perlis
seiko2020
User
Beiträge: 2
Registriert: Sonntag 27. Dezember 2020, 12:52

@__blackjack__ & @naheliegend vielen Dank, genau das habe ich gesucht! :)
Antworten