2017-04-02 5 views
2

Ich habe einen Datenrahmen mit einem Multi-Index von Jahr und Monat bekam wie folgenPandas Multiindex Datenrahmen - Auswahl max von einem Index innerhalb Multiindex

 |  |Value 
Year |Month| 
    | 1 | 3 
1992 | 2 | 5 
    | 3 | 8 
    | ... | ... 
1993 | 1 | 2 
    | ... | ... 

Ich versuche, den Maximalwert für jedes Jahr zu wählen und setzte sich in einem DF wie folgt aus:

 | Max 
Year | 
1992 | 5 
1993 | 2 
    | ... 

es gibt nicht viele Informationen über Multi-Indizes, sollte ich einfach tun, um eine Gruppe von und anwenden oder etwas ähnliches machen es einfacher?

+0

Bitte beheben Ihr Beispiel aber: es gibt keine Möglichkeit die maximale Wert für das Jahr 1992 5 sein kann, da es 8 in Month = 3. Suchen Sie nach max oder idxmax (der Monat, der den größten maximalen Wert gibt?) – smci

Antwort

4

Genau richtig:

df.groupby(level=0).apply(max) 

In meinem Beispiel DataFrame:

 
        0 
Caps Lower    
A a  0 0.246490 
      1 -1.265711 
      2 -0.477415 
      3 -0.355812 
      4 -0.724521 
    b  0 -0.409198 
      1 -0.062552 
      2 -0.731789 
      3 1.131616 
      4 0.085248 
B a  0 0.193948 
      1 2.010710 
      2 0.289300 
      3 0.305373 
      4 1.376965 
    b  0 0.210522 
      1 1.431279 
      2 -0.247171 
      3 0.899074 
      4 0.639926 

Ergebnis:

 
      0 
Caps   
A  1.131616 
B  2.010710 

Dies ist, wie ich die DataFrame, übrigens erstellt:

df = pd.DataFrame(np.random.randn(5,4), columns = l) 
df.columns = pd.MultiIndex.from_tuples(df.columns, names=['Caps','Lower']) 
df = pd.DataFrame(df.unstack()) 
0

Einfachere Lösung ist max nur:

#bernie's sample data 
df = df.max(level=0) 
print (df) 
      0 
Caps   
A  1.131616 
B  2.010710 
Verwandte Themen