Angesichts eines DataFrame (d
) mit MultiIndex-Spalten, würde ich gerne einen anderen DataFrame (d2
) als eine der "multicolumns", so dass die oberste Ebene hat einige Label und auf der zweiten Ebene Etiketten denen des Originals übereinstimmen:Methode zum Setzen neuer Multiindex-Spalten aus verschiedenen Datenrahmen
nr.seed(0)
abc = ['a', 'b', 'c']
mi = pd.MultiIndex.from_product([['A'], abc])
d = DataFrame(np.random.randint(0, 10, (4, 3)), columns=mi)
d
A
a b c
0 5 0 3
1 3 7 9
2 3 5 2
3 4 7 6
d2 = DataFrame(np.random.randint(0, 10, (4, 3)), columns=abc)
d2
a b c
0 8 8 1
1 6 7 7
2 8 1 5
3 9 8 9
Wenn möglich, würde Ich mag sie verbinden, um eine einzelne eingebaute Methode, die die folgende forloop erreicht:
for c2 in d2:
d['B', c2] = d2[c2]
d
A B
a b c a b c
0 5 0 3 8 8 1
1 3 7 9 6 7 7
2 3 5 2 8 1 5
3 4 7 6 9 8 9
Für einen Datenrahmen mit einem einzigen -Niveau Säule:
d3 = d.copy()
d3.columns = d3.columns.droplevel(0)
d3 = d3.rename(columns=dict(zip('abc', 'def')))
d3
d e f
0 5 0 3
1 3 7 9
2 3 5 2
3 4 7 6
ich folgende Möglichkeiten:
d3[d2.columns] = d2
d3
d e f a b c
0 5 0 3 8 8 1
1 3 7 9 6 7 7
2 3 5 2 8 1 5
3 4 7 6 9 8 9
Aber wenn ich versuche, diese mit dem MultiIndexed Datenrahmen, bekomme ich Fehler:
d['B', tuple(d2.columns)] = d2
=> ValueError: Wrong number of items passed 3, placement implies 1
d['B'][tuple(d2.columns)] = d2
=> KeyError: 'B'
Gibt es eine eingebaute Methode zu tun Dies? (Grundsätzlich this für mehrere Spalten gleichzeitig).
Nizza, sieht wie folgt aus arbeiten kann. Irgendeine Idee, wenn es eine DataFrame-Methode gibt, die das kann (wie 'd.some_set_method ('B', d2)')? – beardc
@beardc, ich habe meine Antwort aktualisiert - bitte überprüfen Sie – MaxU
Eigentlich bevorzuge ich die alte Antwort, da es nicht die zusätzliche Funktion schreiben erfordert. Ich wollte fragen, ob es bereits eine eingebaute Methode für den DataFrame gibt, da sie heutzutage eine Menge Funktionalität für eingebaute Methoden zu haben scheint. – beardc