So führen Sie Pandas-Datenrahmen mit MultiIndexes für die Spalten zusammenPython

Python-Programme
Anonymous
 So führen Sie Pandas-Datenrahmen mit MultiIndexes für die Spalten zusammen

Post by Anonymous »

Ich versuche, zwei Pandas-Datenrahmen zusammenzuführen, die einen MultiIndex für die Spalten haben. Dies funktioniert wie erwartet, wenn keine doppelten Spalten vorhanden sind. Wenn jedoch doppelte Spalten vorhanden sind, markiert es einfach die oberste Ebene des Index im rechten Datenrahmen als dupliziert, auch wenn hier unterschiedliche Spalten vorhanden sind
Beispiel für alle unterschiedlichen Spalten:

Code: Select all

import pandas as pd

foo = pd.DataFrame({('one', 'a'): [1, 2, 3], ('one', 'b'): ['c', 'd', 'e']})
bar = pd.DataFrame({('one', 'a'): [1, 3], ('one', 'c'): ['bat', 'baz']})
foo.merge(bar, on=[('one', 'a')], how='left', suffixes=['', '.duplicated'])
Dies generiert das erwartete Ergebnis:

Code: Select all

  one
a  b    c
0   1  c  bat
1   2  d  NaN
2   3  e  baz
Beispiel für duplizierte Spalten:

Code: Select all

import pandas as pd

foo = pd.DataFrame({('one', 'a'): [1, 2, 3], ('one', 'b'): ['c', 'd', 'e']})
bar = pd.DataFrame({('one', 'a'): [1, 3], ('one', 'b'): ['c', 'e'], ('one', 'c'): ['bat', 'baz']})
foo.merge(bar, on=[('one', 'a')], how='left', suffixes=['', '.duplicated'])
Tatsächliche Ausgabe:

Code: Select all

  one    one.duplicated
a  b              b    c
0   1  c              c  bat
1   2  d            NaN  NaN
2   3  e              e  baz
Erwartete/gewünschte Ausgabe:

Code: Select all

  one         one.duplicated
a  b    c              b
0   1  c  bat              c
1   2  d  NaN            NaN
2   3  e  baz              e
Für dieses Problem muss es eine elegante Lösung geben, aber ich finde sie nicht. Die einzigen Lösungen, die ich bisher finden kann, bestehen alle darin, den MultiIndex in einen abgeflachten String umzuwandeln und ihn dann wieder zurückzusetzen – ziemlich viel Aufwand für etwas, das sich wie ein Fehler im Merge-Design anfühlt. Ich mache mir auch Sorgen, dass es zu Fehlern in diesem Prozess kommen könnte, da die Datenrahmen, mit denen der Code arbeitet, keine Garantien für die Werte in den Indizes oder die Anzahl der Spalten haben. Ich kann mich nur auf die Form des Datenrahmens verlassen.
(Ich habe auch versucht, „Join“ statt „Merge“ zu verwenden, aber dadurch werden die Daten völlig durcheinander gebracht und sind unbrauchbar)

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post