2016-04-13 7 views
5

У меня есть данные кадр с мультииндексом так:панды мульти-индекс, как замаскировать данные на втором уровне

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

Первый уровень Дата и второй уровень является периодом. Я хотел бы установить значения где период не равен нулю нулю, то результат будет что-то вроде этого:

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

Если второй уровень был столбец, в отличие от индекса, то решение было бы легко df.Value.loc[df.Period == 0] =0.

Есть ли способ достичь этого, просто используя индекс?

ответ

2

попробовать это:

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

Объяснение:

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 
Смежные вопросы