Создайте группирующую серию g
, это нам понадобится для группировки фрейма данных, чтобы каждый третий элемент (с размером шага 3) принадлежал той же группе, используйте np.unique
для получите уникальные ключи группировки, затем используйте DataFrame.groupby
, чтобы сгруппировать фрейм данных на g
и используйте set_index
, чтобы установить индекс каждого сгруппированного фрейма на k
, наконец, используйте pd.concat
, чтобы объединить все сгруппированные фреймы данных вдоль axis=1
и передать необязательный параметр keys=k
для создания MultiLevel
столбцов:
g, k = df.pop('e').sub(1) % 3 + 1, np.unique(g)
df1 = pd.concat([g.set_index(k) for _, g in df.groupby(g)], keys=k, axis=1)
Подробности:
print(g.tolist())
[1, 2, 3, 1, 2, 3, 1, 2, 3]
print(k)
array([1, 2, 3])
Результат :
print(df1)
1 2 3
col1 col2 col3 col1 col2 col3 col1 col2 col3
1 238.40 238.70 238.20 238.45 238.75 238.2 238.20 238.25 237.95
2 238.10 238.15 238.05 238.10 238.10 238.0 229.10 229.05 229.05
3 229.35 229.35 229.10 229.10 229.15 229.0 229.05 229.05 229.00