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: 13069
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
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
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: 13069
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.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
seiko2020
User
Beiträge: 2
Registriert: Sonntag 27. Dezember 2020, 12:52

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