У меня есть следующий фрейм данных:
cols = pd.MultiIndex.from_tuples([(x, y) for x in ['A', 'B'] for y in ['x', 'y']])
data = np.matrix([[1, 2, 3, 4], [11, 22, 33, 44]])
df = pd.DataFrame(data, columns=cols)
df
Out[]:
A B
x y x y
---+---+---+---+---
0 1 2 3 4
1 11 22 33 44
Я пытаюсь сделать что-то подобное (случай 1 - работает как положено):
df.loc[:, ('A', 'x_delta')] = df.loc[:, ('A', 'x')].shift(periods=1)
df.loc[:, ('A', 'y_delta')] = df.loc[:, ('A', 'y')].shift(periods=1)
df.loc[:, ('B', 'x_delta')] = df.loc[:, ('B', 'x')].shift(periods=1)
df.loc[:, ('B', 'y_delta')] = df.loc[:, ('B', 'y')].shift(periods=1)
df = df.sort_index(axis=1)
df
Out[]:
A B
x x_delta y y_delta x x_delta y y_delta
---+--+--------+----+--------+----+--------+---+--------
0 1 NaN 2 NaN 3 NaN 4 NaN
1 11 1.0 22 2.0 33 3.0 44 4.0
, но с loc
& slice
на уровне = 0 и в одной строке (случай 2 - это не работает ):
df.loc[:, (slice(None), ['x_delta', 'y_delta'])] = df.loc[:, (slice(None), ['x', 'y'])].shift(periods=1)
df
Out[]:
A B
x y x y
---+---+---+---+---
0 1 2 3 4
1 11 22 33 44
Мой вопрос: почему во втором случае df.loc[:, (slice(None), ['x_delta', 'y_delta'])] = ...
ничего не делать (без ошибок, без столбцов x_delta и y_delta в df
), но когда я не делаю нарезки, это прекрасно работает для одного столбца (случай 1)?