Как иметь два разных способа индексации одной оси в панде DataFrame - PullRequest
0 голосов
/ 22 мая 2019

Я бы хотел иметь возможность иметь два индекса столбцов для одной оси одновременно для пандой DataFrame. Объекты в индексах могут быть разных типов, одного перечисления и одной строки, так что оба типа могут использоваться для индексации без двусмысленности. По-другому это будет похоже на MultiIndex без иерархии. Цель состоит в том, чтобы у каждого столбца было имя и тип индексируемого столбца.

Я хочу иметь возможность выполнять обе следующие операции с индексами в одном и том же кадре данных:

df['NAME']
df[MyType.FirstName]      # MyType is an Enum

Я не нашел очевидных способов сделать это. Одним из способов может быть использование одного индекса, который использует объекты «комбинированного» класса, который по-разному переопределяет операторы сравнения в зависимости от заданных типов. Это путь или есть лучший путь?

class Combination:
    def __init__(self, value1, value2):
        self.value1 = value1
        self.value2 = value2

    def __eq__(self, other):
        if isinstance(other, str):
            return self.value1 == other
        else:
            return self.value2 == other

    # etc if other operators are needed

1 Ответ

0 голосов
/ 22 мая 2019

В AFAIK pandas этого нет.Простой способ - использовать словарь перевода:

trans = {MyType.FirstName: 'NAME', ...}

df[trans[MyType.FirstName]]   # same as df['NAME']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...