2016-04-13 20 views
5

Ho un data-frame con multiindice simili:panda multiindice come mascherare i dati dal secondo livello

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

Il primo livello è data e il secondo livello è periodo. Desidero impostare i valori in cui il periodo di non zero a zero è, l'output sarà simile a questo:

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

Se il secondo livello era una colonna rispetto all'indice, la soluzione sarebbe facile df.Value.loc[df.Period == 0] =0.

C'è un modo per ottenere questo, semplicemente usando l'indice?

risposta

2

provare questo:

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

Spiegazione:

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 
Problemi correlati