ich bin dabei den Ausschuss einer Industrieanlage auszuwerten. Die Rohdaten erhalte ich über eine csv Datei. Diese wandle ich in ein DataFrame um. In den Daten findet man die Teile Nr., Datum, Uhrzeit und dann eine ganze Reihe an versch. Ausschussgründen. Ich möchte das so auswerten, dass ich zum Schluss nach Datum, Teilenummer und Schicht (Frühschicht (FS), Spätschicht (SS), Nachtschicht (NS)) sortieren kann. Ich habe auch einen funktionierenden Code, welcher mir alles korrekt macht. Ich habe im Nachgang jedoch eine Zeitanalyse gemacht um herauszufinden, welcher Codeabschnitt am meisten Zeit benötigt. Das Ergebnis ist die for Schleife. Um zu erklären, was ich hier mache, noch folgende Info zu den Schichten. Schauen wir uns dazu mal den Schicht-Zyklus an:
Bsp für einen Arbeitstag:
03.03.2022_6 Uhr bis 14 Uhr = FS (vom 03.03.2023)_14 Uhr bis 22 Uhr = SS (vom 03.03.2023)_22 Uhr bis (6 Uhr am 04.03.2023)= NS (vom 03.03.2023)
Das heißt die Nachtschicht (NS) "geht über zwei Tage". Damit ich jetzt später beim Gruppieren (den Code habe ich jetzt hier nicht drinnen weil der schnell abgearbeitet ist) die Werte richtig zusammenfassen kann, also bswp. den Wert vom 03.03.2023 um 22.25 Uhr mit dem Wert vom 04.03.2023 und 2.25 Uhr (beides in der gleichen Nachtschicht. Also die Nachtschicht vom 03.03.2023), weise ich jeder Uhrzeit eine Schicht (FS,SS,NS) zu und speichere das in einer Liste (Schicht). Gleichzeitig schreibe ich in eine weitere leere liste (Datum1) das Datum aus der Zeile. Außer für die Zeitspanne der NS die im darauffolgenden Tag ist. Also von 0 Uhr bis 6 Uhr. Hier rechne ich einfach, einen Tag zurück. Also hat die Zeile z.B. den Wert 04.03.2023 um 4 Uhr, speichere ich als Datum den 03.03.2023 in der Datum1 Liste ab. Danach hänge ich beide Listen wieder an das DataFrame und kann im Nachgang richtig gruppieren. Es funktioniert auch wie gesagt alles, nur benötigt es relativ viel Zeit. Es gibt sicherlich eine viel smartere Lösung dafür. Kann mir hier jemand weiterhelfen?
Ich würde euch gerne ein Bild der Rohdaten noch zeigen. Aber, dumm wie ich bin, checke ich das hier nicht...
Die Spalte ANGELEGT_AM ist die Datumsangabe in den Rohdaten welche beispielhaft wie folgt abgespeichert ist: 14.09.2022 14:30:30
Code: Alles auswählen
dfData = pd.read_csv('')
dfData[['Datum','Uhrzeit']]=dfData.ANGELEGT_AM.str.split(expand=True)
dfData['Datum']= pd.to_datetime(dfData['Datum'],format= '%d.%m.%Y')
dfData['Uhrzeit'] = pd.to_datetime(dfData['Uhrzeit'],format= '%H:%M:%S' ).dt.time
Schicht=[]
Datum1=[]
for i in range(len(dfData)):
if dfData.iloc[i]['Uhrzeit']>=datetime.strptime('06:00:00', '%H:%M:%S').time() and dfData.iloc[i]['Uhrzeit']<datetime.strptime('14:00:00', '%H:%M:%S').time():
Schicht.append('FS')
Datum1.append(dfData.iloc[i]['Datum'].date())
if dfData.iloc[i]['Uhrzeit']>=datetime.strptime('14:00:00', '%H:%M:%S').time() and dfData.iloc[i]['Uhrzeit']<datetime.strptime('22:00:00', '%H:%M:%S').time():
Schicht.append('SS')
Datum1.append(dfData.iloc[i]['Datum'].date())
if dfData.iloc[i]['Uhrzeit']>=datetime.strptime('22:00:00', '%H:%M:%S').time():
Schicht.append('NS')
Datum1.append(dfData.iloc[i]['Datum'].date())
if dfData.iloc[i]['Uhrzeit']>=datetime.strptime('00:00:00', '%H:%M:%S').time() and dfData.iloc[i]['Uhrzeit']<datetime.strptime('06:00:00', '%H:%M:%S').time():
Schicht.append('NS')
Datum1.append((dfData.iloc[i]['Datum']-timedelta(1)).date())[/color]
dfData.insert(loc=0, column='Datum1', value=Datum1)
dfData.insert(loc=1, column='Schicht', value=Schicht)