2017-10-08 1 views
1

Ich habe einen Datenrahmen mit Spalten A, B, C, D und der Index ist eine Zeitreihe.Wie kann ich einen neuen Datenrahmen nach Multi-Index-Ebene zuordnen?

Ich möchte einen neuen Datenrahmen mit dem gleichen Index, aber viel mehr Spalten in einem Multi-Index erstellen. A, B, C, D sind die erste Ebene des Multi-Index. Ich möchte, dass jede Spalte im neuen Datenfeld den gleichen Wert hat wie A, B, C, D, je nach Multi-Index-Ebene.

Mit anderen Worten, wenn ich einen Datenrahmen wie dieses:

A B C D 
0 2 3 4 5 
1 X Y Z 1 

Ich möchte einen neuen Datenrahmen machen, wie diese

A   B  C D 
    0 1 2 3 4 5 6 7 
0 2 2 2 3 3 4 5 5 
1 X X X Y Y Z 1 1 

Mit anderen Worten sieht - ich tun möchte, das Äquivalent zu einem "WVERWEIS" in Excel, mit der ersten Ebene des Multi-Index und nachschlagen auf dem ursprünglichen Datenrahmen.

Der neue Multiindex ist vordefiniert.

+0

Wie haben Sie die Anzahl der Spalten in der unteren Ebene bestimmt? –

+0

Die Anzahl der Spalten in der unteren Ebene ist vorgegeben. Mit anderen Worten, angenommen, ich habe bereits einen anderen Multi-Index bereit. – karakumy

+0

Können Sie das hier oder den Code, um es zu produzieren? Ich glaube, dass Sie etwas nach dem Motto "Reindex" brauchen, aber wir können Ihnen keine Antwort geben, es sei denn, wir wissen, worauf wir wieder aufbauen müssen. –

Antwort

3

Wie cᴏʟᴅsᴘᴇᴇᴅ in den Kommentaren vorgeschlagen, Sie DataFrame.reindex mit den columns und level Argumente verwenden können:

In [35]: mi 
Out[35]: 
MultiIndex(levels=[['A', 'B', 'C', 'D'], ['0', '1', '2', '3', '4', '5', '6', '7']], 
      labels=[[0, 0, 0, 1, 1, 2, 3, 3], [0, 1, 2, 3, 4, 5, 6, 7]]) 

In [36]: df 
Out[36]: 
    A B C D 
0 2 3 4 5 
1 X Y Z 1 

In [37]: df.reindex(columns=mi, level=0) 
Out[37]: 
    A  B  C D 
    0 1 2 3 4 5 6 7 
0 2 2 2 3 3 4 5 5 
1 X X X Y Y Z 1 1 
+0

Perfekt !! Vielen Dank. – karakumy

+0

Dies ist eine gute Antwort. – piRSquared

Verwandte Themen