Dataframes kombinieren durch Vergleich einer Spalte
Verfasst: Sonntag 12. Dezember 2021, 20:53
Hallo,
meine Ausgangssituation stellt sich vereinfacht wie folgt dar:
Es handelt sich hier um Auszüge aus Buchhaltungsdaten für verschiedene Zeiträume. Diesen Daten ist gemein, dass eine große Zahl der Elemente in Spalte 'Bezeichnung' in beiden dataFrames enthalten ist.
Was nun erreicht werden soll ist Folgendes:
Wenn möglich, wäre ganz optimal aber Folgendes vorgehen:
Wenn es in Spalte 'bezeichnung' von df1 keinen exakten Treffer zum Eintrag in Spalte 'bezeichnung' des df2 gibt, aber zumindest der Anfang gleich ist, bei Buchstaben die ersten drei Zeichen und im Fall von Zahlen eine Ziffer, dann füge den Eintrag aus df2 unter den ersten Treffer nach vorgenannten Kriterien in df1 bzw. df3 ein.
Dies ist aber optional, da m.E. wohl nicht ganz trivial.
Vielen Dank im Voraus.
meine Ausgangssituation stellt sich vereinfacht wie folgt dar:
Code: Alles auswählen
import pandas as pd
dx = {
'bezeichnung': ['Erlöse' , 'Aufwand' , 'Material_19' , 'Gewinn'] ,
'2020': ['1001' , '900' , '90' , '11']
}
dx = {
'bezeichnung': ['Aufwand' , 'Erlöse' , 'Material_16' , 'Gewinn'] ,
'2019': ['1900' , '2001' , '80' , '21']
}
df1 = pd.DataFrame(dx)
df2 = pd.DataFrame(dy)
Es handelt sich hier um Auszüge aus Buchhaltungsdaten für verschiedene Zeiträume. Diesen Daten ist gemein, dass eine große Zahl der Elemente in Spalte 'Bezeichnung' in beiden dataFrames enthalten ist.
Was nun erreicht werden soll ist Folgendes:
- Unter Beibehaltung der Reihenfolge der Spalte 'Bezeichnung' in df1 soll getestet werden, ob für einen Eintrag in Spalte 'bezeichnung' in df2 ein korrespondierender Eintrag in df1 vorhanden ist. Ist dies der Fall, so soll der jeweilige Wert in Spalte '2019' in df2 in eine neue Spalte '2019' in df1 oder einem neuen df3 zum passenden Wert in Spalte 'bezeichnung' übernommen werden.
- Gibt es keinen korrespondierenden Eintrag in Spalte 'bezeichnung' in df1 so soll der jeweilige Eintrag als neuer Eintrag am Ende der Spalte 'bezeichnung' in df1 oder df3 hinzugefügt werden und der zugehörige Eintrag in Spalte '2019' in df1 bzw. df3 übernommen werden.
Code: Alles auswählen
df1 = pd.DataFrame('bezeichnung': ['Erlöse' , 'Aufwand' , 'Material_19' , 'Gewinn', 'Material_16'] ,
'2020': ['1001' , '900' , '90' , '11', '0'] ,
'2019': ['2001' , '1900' , '0' , '21', '80'])
Wenn es in Spalte 'bezeichnung' von df1 keinen exakten Treffer zum Eintrag in Spalte 'bezeichnung' des df2 gibt, aber zumindest der Anfang gleich ist, bei Buchstaben die ersten drei Zeichen und im Fall von Zahlen eine Ziffer, dann füge den Eintrag aus df2 unter den ersten Treffer nach vorgenannten Kriterien in df1 bzw. df3 ein.
Dies ist aber optional, da m.E. wohl nicht ganz trivial.
Vielen Dank im Voraus.