pandas get_level_values behaives unexpectedly

Viewed 264

I have a multi-index in my dataframe like this:

x = pd.MultiIndex(levels=[['a', 'b', 'c'], ['2014.12.31', 'd', 'e', '2015.12.31']],
labels=[[0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2], [0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3]],
names=['proj', 0])
x.get_level_values(0)
x.get_level_values(1)

I expect the get_level_values(0) and get_level_values(1) to give me different results. But they don't. Is this a bug?

However, x.get_level_values('proj') and x.get_level_values(0) give me the results I expect. Why? Can someone please explain that? Thanks.

1 Answers

You have two index levels, and you can get them either by name or by integer index. The index level at integer index 0 has name proj, a string. The index level at integer index 1 has name 0, an integer.

When you call get_level_values(level), pandas searches the index level by name first. So in your situation, calling get_level_values(0) resolves to the second level with the name 0 and get_level_values(1) resolves to the same level, but in this case by integer index 1.

Related