Pandas имеет приятный и многофункциональный механизм для фреймов данных с иерархическими индексами: https://pandas.pydata.org/pandas-docs/stable/advanced.html,, но он в основном предназначен для случая, когда глубина иерархии постоянна. Есть ли стандартный, возможно, менее функциональный способ иметь фрейм данных с иерархическим индексом с различной глубиной?
Мне на самом деле не нужны функции частичного индексирования, группировки и стекирования / распаковки MultiIndex, фрейм данных, в котором столбцы индексируются необработанными кортежами, подойдет моим потребностям.
Я бы хотел сделать что-то вроде следующего:
import pandas as pd
df = pd.DataFrame({
("a",): [1],
("b",): [2],
("x", 1): [3],
("x", 2): [4]
})
Тем не менее, по умолчанию MultiIndex для панд немного перегружен для моих целей в этой ситуации. Например, это делает «истинный» индекс первого столбца равным ("a", nan)
. Затем df[("a",)]
возвращает все столбцы, индекс которых начинается с ("a",)
, включая, например, столбец типа ("a", 1)
, если он присутствует.
Один из вариантов - сделать что-то вроде
import pandas as pd
df = pd.DataFrame({
"a": [1],
"b": [2],
("x", 1): [3],
("x", 2): [4]
})
, который создает фрейм данных, проиндексированный сочетанием строк и кортежей, но это, похоже, не поддерживается.