DataFrames: Mittelwert über eine Spalte in Abhängigkeit von Einträgen in anderen Spalten berechnen

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
Champ
User
Beiträge: 1
Registriert: Samstag 21. August 2021, 20:38

Hallo,

ich bin Python-Newbie und komme bei einer Programmieraufgabe nicht weiter. Ich hoffe, es ist ok, wenn ich hier die Frage stelle.

Gegeben ist eine Datei mit Flugdaten.
In den Daten gibt es u.a. eine Spalte für den Carrier ("OP_CARRIER"), eine Spalte für den Abflugort ("ORIGIN") und eine Spalte für die Flugdistanz ("DISTANCE").
Ich soll die Datei einlesen und die mittlere Flugdistanz für gegebene Carrier und Abflugorte berechnen.
Mit dem Wert muss ich dann weiter rechnen.
Wie bekomme ich den Wert? Ich krieg's nicht hin :-(

Ich denke, ich muss groupby nutzen:

df = pd.read_csv( "fluege.tsv", sep="\t" )
df2.groupby( ["OP_CARRIER", "ORIGIN"])["DISTANCE"].mean()

OP_CARRIER ORIGIN
9E ATL 83.000000
CSG 83.000000
AS ABQ 1180.000000
ADK 1192.000000
ADQ 253.000000
...
YX RIC 825.000000
RSW 169.666667
SAV 213.000000
SDF 714.181818
TLH 386.000000
Name: DISTANCE, Length: 633, dtype: float64

Aber wie bekomme ich es hin, dass ich einen einzelnen Wert (also z.B. für "OP_CARRIER"=="9E" und "ORIGIN"=="CTL") in eine Variable "mean_dist" bekomme?

Ich kann einen MIttelwert über die gesamte Spalte berechnen:

mean_dist = df["DISTANCE"].mean()

Aber es soll ja nur der Mittelwert über die Zeilen berechnet werden, in denen z.B. "OP_CARRIER"=="9E" und "ORIGIN"=="CTL".

Kann mir jemand helfen?

Danke!
Benutzeravatar
__blackjack__
User
Beiträge: 13100
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Das Stichwort für die Pandas-Dokumentation ist Multiindex.

Code: Alles auswählen

In [33]: df = pd.read_csv("test.csv")                                           

In [34]: df                                                                     
Out[34]: 
   A  B   C
0  a  b   1
1  a  b   2
2  a  b   3
3  a  c  23
4  a  c  42
5  a  c  10
6  x  y   3
7  x  y   4
8  x  y   6

In [35]: df2 = df.groupby(["A", "B"]).mean()                                    

In [36]: df2                                                                    
Out[36]: 
             C
A B           
a b   2.000000
  c  25.000000
x y   4.333333

In [37]: df2.loc["a", "c"]                                                      
Out[37]: 
C    25.0
Name: (a, c), dtype: float64
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Benutzeravatar
__blackjack__
User
Beiträge: 13100
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Oder mal mit echten Daten von hier https://www.transtats.bts.gov/DL_Select ... 0%20f748rB für das erste Quartal 2021:

Code: Alles auswählen

In [50]: df = pd.read_csv("Downloads/185229770_T_DB1B_COUPON.csv", usecols=["ORIGIN", "OPERATING_CARRIER", "DISTANCE"])                                

In [51]: df2 = df.groupby(["OPERATING_CARRIER", "ORIGIN"]).mean()               

In [52]: df2.loc["9E", "ATL"]                                                   
Out[52]: 
DISTANCE    363.482611
Name: (9E, ATL), dtype: float64

In [53]: df2.loc["9E", "ATL"][0]                                                
Out[53]: 363.4826112495189
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Antworten