pandas Masking data based on index value


Example

This will be our example data frame:

         color   size
name                 
rose       red    big
violet    blue  small
tulip      red  small
harebell  blue  small

We can create a mask based on the index values, just like on a column value.

rose_mask = df.index == 'rose'
df[rose_mask]
     color size
name           
rose   red  big

But doing this is almost the same as

df.loc['rose']
color    red
size     big
Name: rose, dtype: object

The important difference being, when .loc only encounters one row in the index that matches, it will return a pd.Series, if it encounters more rows that matches, it will return a pd.DataFrame. This makes this method rather unstable.

This behavior can be controlled by giving the .loc a list of a single entry. This will force it to return a data frame.

df.loc[['rose']]
         color   size
name                 
rose       red    big