Изначально у меня есть следующая таблица:
df=pd.DataFrame(
np.arange(4*8).reshape(4,8),
index=list('abcd'),
columns=pd.MultiIndex.from_arrays([list('EEEETTTT'), list('XXYYZZWW'), list('rsrsrsrs')] )
)
E T
X Y Z W
r s r s r s r s
a 0 1 2 3 4 5 6 7
b 8 9 10 11 12 13 14 15
c 16 17 18 19 20 21 22 23
d 24 25 26 27 28 29 30 31
Я добавляю новый столбец с именем 'V'
рядом с ( , ,'s')
многоиндексным столбцом следующим образом:
E T
X Y W Z
r s V r s V r s V r s V
a 0 1 0 2 3 0 6 7 0 4 5 0
b 8 9 0 10 11 0 14 15 0 12 13 0
c 16 17 0 18 19 0 22 23 0 20 21 0
d 24 25 0 26 27 0 30 31 0 28 29 0
Я запустил следующий код, чтобы получить приведенный выше результат:
dfl=[]
for name, x in df.groupby(level=[0, 1], axis=1):
index = pd.IndexSlice
x.loc[:,index[name[0],name[1],'V']]= 0
dfl.append(x)
pd.concat(dfl, axis=1)
Теперь я попробовал следующий «альтернативный» способ получить тот же результат:
def f(x):
idx = pd.IndexSlice
x.loc[:, idx[x.name[0], x.name[1], 'V']]=0
return x
df.groupby(level=[0,1], axis=1).apply(f)
Однако, к моему удивлению, итоговая таблица остается неизменной:
E T
X Y Z W
r s r s r s r s
a 0 1 2 3 4 5 6 7
b 8 9 10 11 12 13 14 15
c 16 17 18 19 20 21 22 23
d 24 25 26 27 28 29 30 31
pandas groupby.appy (func) должен позволять функции возвращать фрейм данных любого размера или даже скаляр.
Может ли это быть ошибкой?