Ausgabe
Ich lese Minutendaten aus einer SQLite-Datenbank in einen Datenrahmen, in dem der Index ein Datetime-Objekt ist:
open high low close volume trade_count vwap ticker
index
2022-09-13 04:26:00+00:00 163.50 163.50 163.50 163.50 298.0 12.0 163.503255 AAPL
2022-09-13 04:45:00+00:00 163.50 163.50 163.50 163.50 727.0 1.0 163.500000 AAPL
2022-09-13 05:16:00+00:00 163.43 163.43 163.43 163.43 202.0 4.0 163.430000 AAPL
2022-09-13 05:44:00+00:00 163.50 163.50 163.50 163.50 121.0 2.0 163.499587 AAPL
2022-09-13 05:45:00+00:00 163.46 163.46 163.46 163.46 200.0 2.0 163.460000 AAPL
... ... ... ... ... ... ... ... ...
2022-09-14 19:57:00+00:00 99.73 99.73 99.69 99.69 1273.0 18.0 99.693425 ZROZ
2022-09-14 19:58:00+00:00 99.69 99.69 99.66 99.69 1114.0 11.0 99.686965 ZROZ
2022-09-14 19:59:00+00:00 99.69 99.82 99.69 99.76 9764.0 76.0 99.736332 ZROZ
2022-09-14 20:00:00+00:00 99.76 99.76 99.76 99.76 2168.0 1.0 99.760000 ZROZ
2022-09-14 20:33:00+00:00 99.96 99.96 99.96 99.96 150.0 4.0 99.968667 ZROZ
[317028 rows x 8 columns] df
Ich möchte diesen massiven Datenrahmen in Bits aufteilen, die nach Ticker und Tag gruppiert sind. Wenn ich die folgende Methode versuche:
table = df.groupby(pd.Grouper(key='index', freq='1D'))
Ich bekomme den Fehler:
raise KeyError(f"The grouper name {key} is not found")
KeyError: 'The grouper name index is not found'
Wenn ich den Schlüssel ändere auf:
table = df.groupby(pd.Grouper(key=df.index, freq='1D'))
Ich bekomme den Fehler:
if getattr(self._gpr_index, "name", None) == key and isinstance(
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
Wie kann ich nach Ticker und nach Tag gruppieren?
Lösung
Da key
der Parameter für den Spaltennamen steht, können Sie ihn weglassen:
table = df.groupby(pd.Grouper(freq='1D'))
Oder level
Parameter verwenden:
table = df.groupby(pd.Grouper(level='index', freq='1D'))
Oder index
in Spalte umwandeln (meiner Meinung nach zu kompliziert):
table = df.reset_index().groupby(pd.Grouper(key='index', freq='1D'))
Beantwortet von – jezrael
Antwort geprüft von – David Goodson (FixError Volunteer)