Ich habe mich jetzt auf Version 2 entschieden, verstehen und verändern
Aufbau des Test Dataframes
Code: Alles auswählen
EXAMPLE = pd.DataFrame(
{'error': [2589, 1223, 2539, 2539],
'start': ['2024-09-02T14:49:46', '2024-09-02T14:50:11', '2024-09-02T14:54:34', '2024-09-02T14:56:34'],
'end': ['2024-09-02T14:52:14', '2024-09-02T14:54:56', '2024-09-02T14:54:56', '2024-09-02T14:56:38']})
EXAMPLE['start'] = pd.to_datetime(EXAMPLE['start'])
EXAMPLE['end'] = pd.to_datetime(EXAMPLE['end'])
error start end
0 2589 2024-09-02 14:49:46 2024-09-02 14:52:14
1 1223 2024-09-02 14:50:11 2024-09-02 14:54:56
2 2539 2024-09-02 14:54:34 2024-09-02 14:54:56
3 2539 2024-09-02 14:56:34 2024-09-02 14:56:38
Mittels
dann in die passende Form gebracht
Code: Alles auswählen
df = EXAMPLE.copy()
a = df.melt(id_vars=['error'], value_vars=['start', 'end']).sort_values('value').set_index('value')
a = a.rename(columns={'variable': 'error_status'})
a.index.names = ['event']
a['error_status'] = a['error_status'].replace({'start': 1, 'end': 0})
Ergibt dann folgende Form:
Code: Alles auswählen
error error_status
event
2024-09-02 14:49:46 2589 1
2024-09-02 14:50:11 1223 1
2024-09-02 14:52:14 2589 0
2024-09-02 14:54:34 2539 1
2024-09-02 14:54:56 1223 0
2024-09-02 14:54:56 2539 0
2024-09-02 14:56:34 2539 1
2024-09-02 14:56:38 2539 0
Aus dieser, dann anhand der Beschreibung / Anweisung von Stackoverflow das erzeugt
Code: Alles auswählen
b = a.set_index('error', append=True).unstack().ffill().fillna(0)
b['total_error'] = b['error_status'].sum(axis=1)
Gibt dann folgende Form:
Code: Alles auswählen
error_status total_error
error 1223 2539 2589
event
2024-09-02 14:49:46 0.0 0.0 1.0 1.0
2024-09-02 14:50:11 1.0 0.0 1.0 2.0
2024-09-02 14:52:14 1.0 0.0 0.0 1.0
2024-09-02 14:54:34 1.0 1.0 0.0 2.0
2024-09-02 14:54:56 0.0 0.0 0.0 0.0
2024-09-02 14:56:34 0.0 1.0 0.0 1.0
2024-09-02 14:56:38 0.0 0.0 0.0 0.0
Damit hätte man zumindest zu jedem vorhandenen Zeiteintrag den Status und auch die Summer aller Fehler. Über einen Resampler auf 1sec Intervall kann man dadurch dann auf jeden Zeit resamplen und dann im Gegenzug auf zB 30sec Intervalle zur vollen und halben Minute wechseln wenn man will
