Dataframe manipulieren
Verfasst: Mittwoch 23. März 2022, 02:19
Hallo zusammen,
ich bin immer noch bei der Ansatzfindung und am überlegen wie ich am besten anfangen kann. Leider habe ich nix vergleichbares im Internet gefunden - vielleicht könnt ihr mir ein paar Tipps geben.
Dafür habe ich einen kleinen Beispieldatensatz erstellt; Ausgangssituation:

ich möchte die Daten auf eine bestimme Art aufbereiten, und zwar so dass fortlaufend Längen für Classes (C1 bis C4) aufsummiert werden - und das dabei einerseits das Feld Position und andererseits das Feld NUMBER als "Trennung" dienen. Ich denke ein Bild beschreibt es besser:

Die Längen werden entsprechend mit (END - START) bestimmt.
Hier die Excel-Datei: https://easyupload.io/vb86lh
hier auf den Button klicken (nicht auf den anderen Kram):

Das hier ist bisher mein Beginn:
Ja, wie man sieht bin ich noch nicht sicher wie ich das Ganze am besten angehen kann. Bin mir nicht sicher, ob ich mit .groupby() arbeiten muss, oder ob ich durch den Dataframe durchiterieren muss, oder ggf. sogar beides. Habt ihr Tipps?
ich bin immer noch bei der Ansatzfindung und am überlegen wie ich am besten anfangen kann. Leider habe ich nix vergleichbares im Internet gefunden - vielleicht könnt ihr mir ein paar Tipps geben.
Dafür habe ich einen kleinen Beispieldatensatz erstellt; Ausgangssituation:

ich möchte die Daten auf eine bestimme Art aufbereiten, und zwar so dass fortlaufend Längen für Classes (C1 bis C4) aufsummiert werden - und das dabei einerseits das Feld Position und andererseits das Feld NUMBER als "Trennung" dienen. Ich denke ein Bild beschreibt es besser:

Die Längen werden entsprechend mit (END - START) bestimmt.
Hier die Excel-Datei: https://easyupload.io/vb86lh
hier auf den Button klicken (nicht auf den anderen Kram):

Das hier ist bisher mein Beginn:
Code: Alles auswählen
import pandas as pd
d = {
'ID': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40],
'CLASS': ['C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C'],
'NUMBER': [21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22],
'START': [0, 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, 1100, 1200, 1300, 1400, 1500, 1600, 1700, 1800, 1900, 2000, 2100, 2200, 2300, 2400, 2500, 2600, 2700, 2800, 2900, 3000, 3100, 3200, 3300, 3400, 3500, 3600, 3700, 3800, 3900],
'END': [100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, 1100, 1200, 1300, 1400, 1500, 1600, 1700, 1800, 1900, 2000, 2100, 2200, 2300, 2400, 2500, 2600, 2700, 2800, 2900, 3000, 3100, 3200, 3300, 3400, 3500, 3600, 3700, 3800, 3900, 4000],
'POSITION': ['A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'A', 'A', 'A', 'A', 'A', 'A', 'A'],
'VALUE': [4.4, 3.8, 3.7, 2.9, 1.7, 1.7, 2.8, 2.0, 2.5, 1.6, 1.9, 2.9, 2.7, 2.8, 3.5, 3.5, 2.7, 2.8, 3.5, 3.5, 2.7, 2.3, 1.3, 3.5, 3.6, 3.9, 3.6, 2.9, 2.2, 1.6, 1.1, 3.6, 3.9, 3.7, 3.6, 4.0, 3.6, 4.1, 5.0, 3.9]
}
df = pd.DataFrame(data=d)
for number in df['NUMBER'].unique().tolist():
print('to do')