У меня есть такой кадр данных, как показано ниже:
import pandas as pd
import numpy as np
np.random.seed(22)
df = pd.DataFrame.from_dict({'a': np.random.rand(200), 'b': np.random.rand(200), 'x': np.tile(np.concatenate([np.repeat('F', 5), np.repeat('G', 5)]), 20)})
df.index = pd.MultiIndex.from_product([[1, 2], list(range(0, 10)), [1, 2, 3, 4, 5, 1, 2, 3, 4, 5]])
df.index.names = ['g_id', 'm_id', 'object_id']
Я бы хотел сместить значения для всех групп, определенных как ['g_id', 'm_id']
, например:
- значение
['a', 'b']
столбцов в индексе (1, 1, 1)
нового фрейма данных будет значением из индекса (1, 0, 1)
исходного фрейма данных, т.е. [0.208461, 0.980866]
- значение
['a', 'b']
столбцов в индексе (2, 4, 3)
нового фрейма данных будет значением из индекса (2, 3, 3)
исходного фрейма данных, т.е. [0.651138, 0.559126]
.
Операция аналогична описанной в this топи c. Однако мне нужно сделать это с несколькими столбцами, и мне не повезло, пытаясь обобщить предоставленное решение.