ich habe ein DataFrame voll mit Messwerten( knapp 470'000 Zeilen). Im DataFrame befinden sich Messwerte eines Sensors der bei verschiedenen Betriebsparametern betrieben wird.
Ich möchte den Sensor bei seinen verschiedenen Betriebsparametern analysieren. Dabei ist es wichtig, nur jeweils die letzten 10 Messwerte (da sich Sensor einpendeln muss) einer Betriebsparameterkombination zu erhalten. Daher möchte ich aus dem ursprünglichen DataFrame ein ausgedünntes DataFrame erstellen, das nur aus den erwähnten letzten 10 Messwerten jeder Kombination besteht.
Mein ursprüngliches DataFrame sieht wie folgt aus: https://ibb.co/DwJTf5q. Die verschieden Indizes spiegeln die Betriebparameter, sowie Messablauf wieder.
Ich habe nun ein bisschen Code geschrieben, der mein Anliegen erfüllt, aber leider sehr ineffizient ist. Dabei wird durch alle Indizes iteriert und ein neues DataFrame konkateniert.
Der Code sieht so aus:
Code: Alles auswählen
start_time = time.time()
minparamzyklus = mwti['Param-Zyklus'].min()
maxparamzyklus = mwti['Param-Zyklus'].max()
minparam_H_ID = mwti['Param-H-ID'].min()
maxparam_H_ID = mwti['Param-H-ID'].max()
minparam_EL_ID = mwti['Param-EL-ID'].min()
maxparam_EL_ID = mwti['Param-EL-ID'].max()
minDruck_Zyklus = mwti['Druck-Zyklus'].min()
maxDruck_Zyklus = mwti['Druck-Zyklus'].max()
minDruck_Stufe = mwti['Druck-ID'].min()
maxDruck_Stufe = mwti['Druck-ID'].max()
newfr = pd.DataFrame()
print(maxparamzyklus,maxparam_H_ID,maxparam_EL_ID,maxDruck_Zyklus,maxDruck_Stufe)
for param_zyklus in range(minparamzyklus,maxparamzyklus+1):
for param_h_id in range(minparam_H_ID,maxparam_H_ID+1):
for param_el_id in range(minparam_EL_ID,maxparam_EL_ID+1):
for druck_zyklus in range(minDruck_Zyklus,maxDruck_Zyklus+1):
for druck_stufe in range(minDruck_Stufe,maxDruck_Stufe+1):
anhang = mwti.loc[pd.IndexSlice[param_zyklus,param_h_id,param_el_id,druck_zyklus,druck_stufe,:],:].iloc[-10:]
newfr = pd.concat([newfr,anhang])
print('--- %s Sekunden ---' %(time.time()-start_time))

Daher meine Frage, ist mein Anliegen auch einfacher zu lösen, zum Beispiel mit IndexSlicing?
Wäre dankbar für jegliche Vorschläge, die meine Rechenzeit verringern.
Grüße Peter