Pandas multi-index how to mask data at the second level

I have a multi-index data frame:

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

The first level is the date, and the second level is the period. I would like to set values ​​where the period is not zero, the result would be something like this:

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

If the second level was a column, not an index, the solution would be easy df.Value.loc[df.Period == 0] =0 .

Is there a way to achieve this simply by using an index?

+5
source share
1 answer

try the following:

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

Explanation:

 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 
+2
source

Source: https://habr.com/ru/post/1247069/


All Articles