Gleiche Zellenwerte finden und summieren

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
rennse
User
Beiträge: 3
Registriert: Dienstag 19. Mai 2020, 22:32

Donnerstag 10. Juni 2021, 09:14

Hallo miteinander,

ein ehemaliger Kollege von mir hat regelmäßig unsere bestellten Artikel ausgewertet. Diese liegen immer als Export in .xlsx-Format vor.
Leider können die Daten in dieser Excel-Datei immer unterschiedlich vorliegen -_-

1. Variante: (Beispiel)

Artikel Bestellemenge
a 5
b 2
c 8
b 2
a 1

2. Variante: (Beispiel)
a 2
a 5
b 0.3
b 1.7
c 0.5

Der Kollege hat wohl vorher diese Daten "händisch" in Excel sortiert und die Mengen des geichen Artikels dann summiert.
Ich dachte mir das es ja auch mit Python gehen müsste?! Doch leider bin ich noch ein ziemlicher Anfänger und einen Ansatz zur Lösung des Problemes habe ich nicht gefunden (Will auch nicht ausschließen das ich zu blöd bin :lol: )

Ich hoffe das mir hier jemand einen Ansatz liefern kann?


Beste Grüße, Renée
Sirius3
User
Beiträge: 14601
Registriert: Sonntag 21. Oktober 2012, 17:20

Donnerstag 10. Juni 2021, 09:36

Kennst Du pandas?
einfachTobi
User
Beiträge: 323
Registriert: Mittwoch 13. November 2019, 08:38

Donnerstag 10. Juni 2021, 09:40

Vielleicht kann man sogar vorher ansetzen, bevor der Export in Excel geschieht. Woher kommen die Daten? Warum haben sie manchmal ein abweichendes Format?
rennse
User
Beiträge: 3
Registriert: Dienstag 19. Mai 2020, 22:32

Donnerstag 10. Juni 2021, 11:02

Sirius3 hat geschrieben:
Donnerstag 10. Juni 2021, 09:36
Kennst Du pandas?
Also wie ich die Excel-Datei mithilfe von pd.read_excel einlese habe ich herausgefunden. Wenn ich es richtig verstanden habe, kann ich dann über sort.by die Werte sortieren.
Doch wie der weitere Weg ist, dazu finde ich keinen Ansatz. Immer nur Beispiele wie ich ganze Spalten summiere. Ich müsste doch aber die ganzen "a", "b"....etc. vorher gruppieren um sie summieren zu können, oder?

einfachTobi hat geschrieben:
Donnerstag 10. Juni 2021, 09:40
Vielleicht kann man sogar vorher ansetzen, bevor der Export in Excel geschieht. Woher kommen die Daten? Warum haben sie manchmal ein abweichendes Format?
Die Excel-Dateien werden vom ERP-System exportiert. Leider können wir da nichts einstellen, das könnte nur der ERP-System-Programmierer abändern. Da hat man mir schon gesagt, das es kurzfristig nicht möglich sei, das abzuändern bzw. die Programmierung abzuändern -_-
Benutzeravatar
__blackjack__
User
Beiträge: 8716
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Donnerstag 10. Juni 2021, 11:56

@rennse: Gruppieren ist ja schon ein Stichwort das Du hast. Schau doch mal in das Pandas-Benutzerhandbuch, allererster Abschnitt „10 minutes to pandas“ die Überschriften dort. Da gibt's eine die heisst „Grouping“.
long long ago; /* in a galaxy far far away */
rennse
User
Beiträge: 3
Registriert: Dienstag 19. Mai 2020, 22:32

Donnerstag 10. Juni 2021, 13:21

Vielen Dank an alle für die Hilfe ;)

Bin irgendwie nicht auf den Gedanken gekommen in das Kapitel "10 minutes to pandas“ zu schauen -_-
Mein Fehler war auch das ich die Excel-Liste zwar eingelesen hatte, aber ohne Index. Daher konnte ich die Datensätze nicht nach "Artikel" gruppieren.
Meine Lösung sieht nun wie folgt aus:

----
import pandas as pd

df= pd.read_excel('Test1.xlsx', header=1) #Einlesen der Excel-Datei

print(df.head) #Ausgabe zur Kontrolle

df2 = df.groupby("Artikel").sum("Anzahl") #Gruppierung der Spalte "Artikel" und Summierung der jeweiligen Werte der Spalte "Anzahl"

print(df2) #Ausgabe zur Kontrolle

df2.to_excel("Bestellmengen_sauber.xlsx", sheet_name="Auflistung") #Ausgabe in neue Datei
----

So funktioniert es zumindest :D
Das es noch eine "schönere" Lösung gibt, davon gehe ich aus :D

Der nächste Schritt wird sein, das er das für alle Excel-Dateien im Ordner macht und diese in separate Dateien speichert oder so ähnlich. Da bin ich mir noch nicht sicher wie ich es gerne haben möchte ;)

Aber aufjedenfall nochmal Danke für das "schubsen" in die richtige Richtung ;)
Antworten