groupby
позволяет разделить DataFrame вдоль уровня MultiIndex с теми же значениями level_values. Мы будем использовать DataFrame.xs
для удаления уровня индексации группы, оставляя только те столбцы, которые вам нужны. Отдельные DataFrames хранятся в словаре, снабженном уникальными значениями уровня 1 исходного столбца MultiIndex.
Пример данных
import pandas as pd
import numpy as np
np.random.seed(123)
df = pd.DataFrame(np.random.randint(1, 10, (4, 9)),
columns=pd.MultiIndex.from_product([['df1', 'df2', 'df3'],
['compass', 'gyro', 'accel']]))
# df1 df2 df3
# compass gyro accel compass gyro accel compass gyro accel
#0 3 3 7 2 4 7 2 1 2
#1 1 1 4 5 1 1 5 2 8
#2 4 3 5 8 3 5 9 1 8
#3 4 5 7 2 6 7 3 2 9
Код
d = {idx: gp.xs(idx, level=1, axis=1) for idx,gp in df.groupby(level=1, axis=1)}
d['gyro']
# df1 df2 df3
#0 3 4 1
#1 1 1 2
#2 3 3 1
#3 5 6 2
Поскольку такие разбиения легко доступны с groupby
, вам может даже не потребоваться хранить отдельные кадры данных; Вы можете управлять каждым из них отдельно с помощью GroupBy.apply
.