die folgenden Daten sollen nach Jahr, Monat und Produktgruppe gruppiert und aufsummiert werden. Die Produktgruppe stellen die Buchstaben der Artikelnummer dar.
Beispieldaten (sind im Original in einer Excel-Datei):
Code: Alles auswählen
No_SalesLine ShipmentDate_SalesLine SalesOrderAmount
AL000660 01.04.26 10926,9
S_02 01.04.26 95
AL000113 01.04.26 20582,4
S_02 01.04.26 190
AL000020 01.06.26 22521,6
AL000112 01.10.26 19206
AL000632 01.10.26 19756,44
S_02 01.10.26 418
AL000113 01.12.26 22640,64
S_02 01.12.26 209
AL000679 02.02.26 5961,6
S_02 02.02.26 57
ZR000020 02.02.26 3907,2
FS001862 02.07.26 56595
S_02 02.07.26 1540
ANLB001015 03.02.26 7159,15
S_02 03.02.26 25
ANLB001252 03.03.26 29366,31
S_02 03.03.26 686,93
AL000632 03.03.26 8906,88
S_02 03.03.26 76
S_01 03.03.26 600
AL000359 03.03.26 18598,72
AL000786 03.03.26 11535,66
S_02 03.03.26 209
S_01 03.03.26 1650
NULL NULL NULL
NULL NULL NULL
Code: Alles auswählen
import pandas as pd
OPEN_ORDERS_FILE = 'daten_beispiel.xlsx'
df = pd.read_excel(OPEN_ORDERS_FILE, header=0,
usecols=['No_SalesLine', 'ShipmentDate_SalesLine',
'SalesOrderAmount'],
dtype={'SalesOrderAmount': float})
#Aufräumen des Data Frames:
# 1. alle Zeilen entfernen, wie alle Werte NaN sind
# 2. alle Zeilen entfernen, die einen MU-Artikel enthalten, weil der
# Betrag hier Null (0) sein muss
# 3. Artikelnummer in String umwandeln
# 4. Datum ins ISO8601 Format konvertieren
# 5. Produktgruppe basierend auf der Artikelnummer hinzufügen
df = df.dropna(how='all')
indices_to_drop = df[df['No_SalesLine'].str.startswith('MU') == True].index
df = df.drop(indices_to_drop)
df = df.astype({'No_SalesLine': 'string'})
df['ShipmentDate_SalesLine'] = pd.to_datetime(df['ShipmentDate_SalesLine'], format='%d.%m.%y', yearfirst=True)
df['ItemGroup'] = df['No_SalesLine'].str.extract(r'([A-Z]{1,4})')
df_by_year_and_month = df.groupby([df['ShipmentDate_SalesLine'].dt.year, df['ShipmentDate_SalesLine'].dt.month, 'ItemGroup']).agg({'SalesOrderAmount':'sum'})
print('Umsatzvorschau, Gesamtübersicht, Summe in Euro')
print('----------------------------------------------')
print(df_by_year_and_month.to_string())
print('\n\n`')Code: Alles auswählen
2026
Zeilenbeschriftungen 2 3 4 6 7 10 12
AL 5961,6 39041,26 31509,3 22521,6 38962,44 22640,64
ANLB 7159,15 29366,31
FS 56595
S 82 3221,93 285 1540 418 209
ZR 3907,2
Gesamtergebnis 17109,95 71629,5 31794,3 22521,6 58135 39380,44 22849,64
Die Zeile:
Code: Alles auswählen
table = pd.pivot_table(df, values='SalesOrderAmount', index=['ItemGroup'],
columns=[df['ShipmentDate_SalesLine'].dt.year, df['ShipmentDate_SalesLine'].dt.month],
aggfunc='sum')Code: Alles auswählen
ValueError: The name ShipmentDate_SalesLine occurs multiple times, use a level number