Pandas Dataframes zusammenfügen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Freumel
User
Beiträge: 69
Registriert: Donnerstag 25. Januar 2018, 13:47

Hallöchen,

Die Frage ist ein Mix aus Datenbank & Pandas.

Folgende Ausgangslage: Es existiert eine Datenbank mit mehreren Tabellen. Dabei gibt es eine zentrale Tabelle (ähnlich wie das Star-Schema) - ich nenne sie im folgenden einfach mal MAIN.
Alle Tabellen referenzieren auf die Tabelle MAIN.

Die Tabelle MAIN hat eine ID als Primary Key und diese ID ist über alle anderen Tabellen Konstant. Die Zuordnung ist also immer eindeutig. Allerdings kann eine Tabelle beliebig oft auf die MAIN Tabelle Referenzieren (ich glaube das nennt man dann Many to One Relation)

Die Tabellen Abseits von MAIN (Ich nenne sie mal A,B,C,D,...) referenzieren auch untereinander aufeinander. Es gibt eine Referenz von A nach B. Zusätzlich gibt es indirekte Verbindungen. C und B sind nicht per Many To One miteinander verbunden. Sie Referenzieren teilweise auf die gleiche MAIN Reihe.
Ach und es kann sein, dass die Referenz von A nach B optional ist, während die von A nach MAIN immer verpflichtend ist.

Nun habe ich Pandas und kann mir jede Tabelle einzeln als Dataframe von der Datenbank einlesen.

Jetzt kommen wir zur Problemstellung:
Ich möchte eine Art Flat Dataframe erzeugen - ich nenne es DF_FLAT.
Dieses DF_FLAT beinhaltet jede Valide Kombination aus MAIN.ID, A.ID, B.ID, C.ID, ....
Die Kombinationen ergeben sich jedoch aus individuellen Zusammenhängen und teilweise aus indirekten Verknüpfungen.
Zudem sind die Anzahl der Einträge pro Tabelle unterschiedlich.

Ich habe einzelne Kombinationsdataframes erzeugt, die so auch valide sind.
Nun möchte ich die unterschiedlichen Dataframes miteinander vereinen.
Die Vereinigung geschieht jeweils über den Abgleich der ID und den daraus resultierenden validen Kombinationen der Nebentabellen.

Versteht man mich ungefähr?

Im Prinzip möchte ich die Relation von den Nebentabellen auf die MAIN Tabelle umkehren und von der MAIN auf die Nebentabellen zeigen. Der Datensatz hat über 6 Mio Einträge. Brutforce der entstehenden Permutationen beliebiger Kombinationen scheint mir ziemlich langwierig ;)

Eventuell fehlt mir nur ein Suchwort
Benutzeravatar
sparrow
User
Beiträge: 4532
Registriert: Freitag 17. April 2009, 10:28

Zeig doch mal am Beispiel von 3 Tabelle, wie sich das verhält.
Ich würde das direkt von der Datenbank lösen lassen und die Tabellen dort bei der Abfrage mittels JOIN verbinden.
Freumel
User
Beiträge: 69
Registriert: Donnerstag 25. Januar 2018, 13:47

Ich habe anbei einmal mein Wunschschema (VAR 1) und die aktuelle Lösung (VAR 2) angefügt.
Bei VAR 2 ist zu sagen, dass R_ID jeweils die Reference ID beschreibt und R_T den Reference Table.

Ziel ist es eine Tabelle zu erstellen mit der ich auf viele verschiedene Tabellen Joinen kann. Aktuell Joine ich von vielen verschiedenen Tabellen auf eine einzige ohne die Zusammenhänge der Joins als solche zu kennen.

Code: Alles auswählen

===========================
VAR 1
===========================
MAIN NEW
ID      A       B      C
1       1       1       -
2       ?       2       1


===========================
VAR 2
===========================
MAIN NEW
ID      R_ID       R_T    
1       1           A     
1       1           B
2       2           A
2       3           A
2       4           A
2       5           A
2       2           B
2       1           C
===========================
DATA 1 (easy)
===========================
MAIN ID 1
IN A WITH ID 1
IN B WITH ID 1



===========================
DATA 2 (advanced)
===========================
MAIN ID 2
IN A WITH ID 2,3,4,5
IN B WITH ID 2
IN C WITH ID 1
Antworten