'Get a multiple-index column values

Let's assume we have a DataFrame df with N rows:

| multiple-index |  | ordinary columns |
I_A, I_B, I_C, I_D,  C_A, C_B, C_C, C_D

How can we extract all N values for I_B index column? df.index gives us all combinations of I_A...I_D but it is not what we need. Of course, we can iterate over it but it will cost productivity, there must be an easier, more straightforward way?

Thank you for your time.

UPDATE

E.g., we have df generated by:

data = {
    "animal": ["cat", "dog", "parrot", "hamster"],
    "size":   ["big", "big", "small", "small"],
    "feet":   [4, 4, 2, 4]
}

multi = pd.DataFrame(data)

multi.set_index(["size", "feet"], inplace = True)

and which is:

              animal
 size feet |
  big    4 |     cat
  big    4 |     dog
small    2 |  parrot
small    4 | hamster

Its index is:

MultiIndex([(  'big', 4),
            (  'big', 4),
            ('small', 2),
            ('small', 4)],
           names=['size', 'feet'])

from which we would like to get all sizes:

['big', 'big', 'small', 'small']

How can we do that?



Solution 1:[1]

I think you're looking for MultiIndex.get_level_values:

multi.index.get_level_values('size')

Output: Index(['big', 'big', 'small', 'small'], dtype='object', name='size')

Or as list:

multi.index.get_level_values('size').to_list()

Output: ['big', 'big', 'small', 'small']

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 mozway