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!
DataFrames: Mittelwert über eine Spalte in Abhängigkeit von Einträgen in anderen Spalten berechnen
- __blackjack__
- User
- Beiträge: 13119
- 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
- __blackjack__
- User
- Beiträge: 13119
- 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