2016-11-04 3 views
1

Gerade jetzt füge ich einen Datenrahmen (df) whos Struktur haben können, indem Sie reproduziert werden:eine Kategorie zu einem Pandas Multiindex Datenrahmen Ebene

d = {('Control', 0, 'mean'): {'Field 1': 1.0}, 
    ('Control', 0, 'stErr'): {'Field 1': 0.0}, 
    ('Control', 0, 'stdev'): {'Field 1': 0.0}, 
    ('Control', 48, 'mean'): {'Field 1': 1.08}, 
    ('Control', 48, 'stErr'): {'Field 1': 0.01}, 
    ('Control', 48, 'stdev'): {'Field 1': 0.03}, 
    ('Test1', 0, 'mean'): {'Field 1': 1.00}, 
    ('Test1', 0, 'stErr'): {'Field 1': 0.00}, 
    ('Test1', 0, 'stdev'): {'Field 1': 0.00}, 
    ('Test1', 48, 'mean'): {'Field 1': 1.08}, 
    ('Test1', 48, 'stErr'): {'Field 1': 0.01}, 
    ('Test1', 48, 'stdev'): {'Field 1': 0.03}} 

df = pd.DataFrame(d).T 

ich in die Datenrahmen eine andere Kategorie ‚Verhältnis‘ hinzufügen möchten bei die Ebene, auf der momentan mean, stErr und stdev existieren.

Derzeit sucht der Index wie folgt aus:

df.index() 
MultiIndex(levels=[['Control', 'Test1'], [0, 48], ['mean', 'stErr', 'stdev']], 
     labels=[[0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1], [0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1], [0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2]]) 

Um zu klären, wo Ich mag würde die Kategorie Verhältnis I der Index des neuen Datenrahmen wie folgt aussehen

df_new.index() 
MultiIndex(levels=[['Control', 'Test1'], [0, 48], ['mean', 'stErr', 'stdev', 'ratio']], 
     labels=[[0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1], [0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1], [0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2]]) 
+0

hat 'df.index = df.index.set_levels ([ 'mean', 'Sterr', 'stdev', 'Verhältnis'], level = 2)' tun, was Sie wollen? –

+0

@VictorChubukov, die ungültige Syntax scheint. 'df.index = df .index.set_levels (['mean', 'stErr', 'stdev', 'ratio'], level = 2) ^ SyntaxError: ungültiges Zeichen in Bezeichner' – agf1997

+0

Sie haben ein Extra Raum –

Antwort

1

Lets würde glauben hinzufügen haben Sie sagen, ein pd.MultiIndex, mux

mux = pd.MultiIndex(
    levels=[['Control', 'Test1'], 
      [0, 48], 
      ['mean', 'stErr', 'stdev']], 
    labels=[[0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1], 
      [0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1], 
      [0, 2, 1, 0, 2, 1, 0, 2, 1, 0, 2, 1]], 
    names=['device', 'interval', None]) 

Sie können mit set_levels

mux.set_levels(['mean', 'stErr', 'stdev', 'ratio'], level=2, inplace=True) 

Aber dann müssen Sie mit der Einstellung der Etiketten als auch verfolgen.

Dies ist ein fraglich kluger Weg.

mux = mux.to_series().unstack([0, 1]) \ 
     .append(pd.Series(None, name='ratio')) \ 
     .unstack().index 
+0

Wie wird dies tatsächlich auf den Datenrahmen angewendet? – agf1997

+0

Ihre Frage zeigt, dass Sie einen neuen 'pd.MultiIndex' wünschen. Wenn Sie etwas anderes möchten, sollten Sie sich die Zeit nehmen, um zu demonstrieren, was Sie speziell wollen. Lesen Sie diese Anleitung http://stackoverflow.com/help/mcve – piRSquared

+0

Ich zeigte den Index, um das Layout des Datenrahmens zu beschreiben. Ich werde weitere Erläuterungen geben. – agf1997

Verwandte Themen