2016-04-13 8 views
5

Ich habe einen Datenrahmen mit Multi-Index wie folgt aus:Pandas Multi-Index, wie die Daten von der zweiten Ebene zu maskieren

Date  Period  Value \n 
20130101 0   12 \n 
20130101 1   13 
20130102 0   13 
20130102 1   14 

Die erste Ebene ist Datum und die zweite Ebene ist Zeit. Ich mag die Werte setzen, wo die Zeit nicht Null auf Null ist, würde die Ausgabe so etwas wie diese:

Date  Period  Value 
20130101 0   12 
20130101 1   0 
20130102 0   13 
20130102 1   0 

Wenn die zweite Ebene eine Spalte im Gegensatz zu Index ist, wäre die Lösung einfach df.Value.loc[df.Period == 0] =0.

Gibt es eine Möglichkeit, dies zu erreichen, indem Sie einfach Index verwenden?

Antwort

2

versuchen Sie dies:

df.loc[df.index.get_level_values('Period') != 0, 'Value'] = 0 

Erläuterung:

In [5]: df 
Out[5]: 
       Value 
Date  Period 
20130101 0   12 
     1   13 
20130102 0   13 
     1   14 

In [6]: df.index.get_level_values('Period') 
Out[6]: Int64Index([0, 1, 0, 1], dtype='int64', name='Period') 

In [7]: df.index.get_level_values('Period') != 0 
Out[7]: array([False, True, False, True], dtype=bool) 

In [8]: df[df.index.get_level_values('Period') != 0] 
Out[8]: 
       Value 
Date  Period 
20130101 1   13 
20130102 1   14 

In [9]: df.loc[df.index.get_level_values('Period') != 0, 'Value'] = 0 

In [10]: df 
Out[10]: 
       Value 
Date  Period 
20130101 0   12 
     1   0 
20130102 0   13 
     1   0 
Verwandte Themen