2016-07-12 3 views
2

Ich habe eine Tabelle, die wie folgt aussieht:Runde Säulen basierend auf der zweiten Ebene der Mehrspaltige

>>> df.head() 
Out[13]: 
           v     u      
          init change integral  init change 
    foo   bar              
baseline   NaN 0.025054 0.858122 0.017930 0.048435 1.091943 
     a   10.0 0.025042 0.856307 0.017546 0.047815 1.100351 
        50.0 0.025008 0.856681 0.010052 0.048252 1.056658 
     b   1.0 0.025045 0.858044 0.015635 0.047135 1.091384 
        2.0 0.025048 0.855388 0.016115 0.047324 1.087964 

Nun möchte ich Spalten wie auf dem Etikett der zweiten Ebene der Spalte basierend auszuwählen, und um sie herum.

Ich kann auf sie zugreifen mit xs: df.xs('init', 1, 1). Allerdings kann ich natürlich nicht xs verwenden, um die Werte zu ersetzen:

>>> df.xs('init', 1, 1) = df.xs('init', 1, 1).round(decimals=3) 
    File "<ipython-input-12-47c16e5011a3>", line 1 
    df.xs('init', 1, 1) = df.xs('init', 1, 1).round(decimals=3) 
SyntaxError: can't assign to function call 

Was die Art und Weise, hier zu gehen?

Antwort

2

betrachten die Datenrahmen:

df = pd.DataFrame(np.arange(8).reshape(2, 4), 
        ['a', 'b'], 
        pd.MultiIndex.from_product([['A', 'B'], ['One', 'Two']])) 

df 

enter image description here

Verwenden pd.IndexSlice

df.loc[:, pd.IndexSlice[:, 'Two']] *= 3 

df 

enter image description here

In diesem Fall wird pd.IndexSlice[:, 'Two'] alle Elemente aus der ersten Ebene Spezifizierungs und 'Two' von der zweiten Ebene. Mit loc können wir df zuweisen.