Ausgabe
Ich habe ein Dataset, an dem ich arbeite, und es hatte eine Datetime-Spalte, die so aussah (2012-01-01 00:00:00; 2012-01-01 01:00:00 …). Ich habe also Daten für jede Stunde, aber ich muss eine Analyse basierend auf einem Tag machen. Also habe ich eine weitere Spalte nur mit dem Datum erstellt. Dataframe ist ungefähr so:
Datetime Date Airquality(float)
0 2012-01-01 00:00:00 2012-01-01 120.00
1 2012-01-01 01:00:00 2012-01-01 150.12
2 2012-01-01 02:00:00 2012-01-01 140.00
..
40 2012-01-02 00:00:00 2012-01-02 130.54
41 2012-01-02 01:00:00 2012-01-02 110.33
...
99 2012-12-31 23:00:00 2012-12-31 190.76
Jetzt muss ich alle Tage extrahieren, an denen die Verschmutzung für das Jahr 2012 höher als 150 war (im Datensatz gibt es Daten für mehr als ein Jahr), und wenn ich nur nach der Datumsspalte gruppiere, erhalte ich viel mehr Informationen als benötigt, denn es gibt natürlich Duplikate.
Lösung
Gegeben:
Datetime Date Airquality(float)
0 2012-01-01 00:00:00 2012-01-01 120.00
1 2012-01-01 01:00:00 2012-01-01 150.12
2 2012-01-01 02:00:00 2012-01-01 140.00
3 2012-01-02 00:00:00 2012-01-02 130.54
4 2012-01-02 01:00:00 2012-01-02 110.33
5 2012-12-31 23:00:00 2012-12-31 190.76
Tun:
# We don't actually need this column.
df = df.drop('Date', axis=1)
# This may be already done but...
df.Datetime = pd.to_datetime(df.Datetime)
# Set it as your index.
df = df.set_index('Datetime')
# Filter to just 2012,
# Resample to daily taking the max.
# Filter to only show 'Airquality(float)' values > 150.
output = (df.loc[df.index.year == 2012]
.resample('1d').max()
[lambda x: x['Airquality(float)'].gt(150)])
print(output)
Ausgabe:
Airquality(float)
Datetime
2012-01-01 150.12
2012-12-31 190.76
Beantwortet von – BeRT2me
Antwort geprüft von – Dawn Plyler (FixError Volunteer)