Skip to content

API: unclear what integer level name references: name or position? #21677

Open
@jorisvandenbossche

Description

@jorisvandenbossche

I assumed that in eg get_level_values, stack, unstack, ... (which all boil down to the behaviour of _get_level_number) using an integer to specify the level, would always mean positional because we have no way to disambiguate between position or name in those cases.

But, this seems very inconsistent:

In [40]: mi = pd.MultiIndex.from_product([[0, 1], [2, 3], [4, 5]], names=[1, 1, 2])

In [41]: mi._get_level_number(0)     # <--- positional
Out[41]: 0

In [43]: mi._get_level_number(1)     # <--- positional (as name should raise an error given duplicates)
Out[43]: 1

In [44]: mi._get_level_number(2)     # <--- positional / name is the same
Out[44]: 2

In [45]: mi = pd.MultiIndex.from_product([[0, 1], [2, 3], [4, 5]], names=[2, 1, 0])

In [46]: mi._get_level_number(0)     # <--- name
Out[46]: 2

In [47]: mi._get_level_number(2)     # <--- name
Out[47]: 0

In [48]: mi = pd.MultiIndex.from_product([[0, 1], [2, 3], [4, 5]], names=[2, 1, 1])

In [49]: mi._get_level_number(2)     # <--- name
Out[49]: 0

In [50]: mi._get_level_number(1)     # <--- positional (as name should raise an error given duplicates)
Out[50]: 1

In [51]: mi._get_level_number(0)     # <--- positional
Out[51]: 0

In [52]: mi = pd.MultiIndex.from_product([[0, 1], [2, 3], [4, 5]], names=[1, 0, 1])

In [53]: mi._get_level_number(1)     # <--- positional (as name should raise an error given duplicates)
Out[53]: 1

In [54]: mi._get_level_number(0)     # <--- name
Out[54]: 1

In [55]: mi = pd.MultiIndex.from_product([[0, 1], [2, 3], [4, 5]], names=[0, 0, 1])

In [56]: mi._get_level_number(0)     # <--- positional (as name should raise an error given duplicates)
Out[56]: 0

In [57]: mi._get_level_number(1)     # <--- name
Out[57]: 2

In [58]: mi._get_level_number(2)     # <--- positional

Am I missing something? Was this discussed before?

cc @toobaz

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions