Вы можете попробовать это:
df = pd.DataFrame({'Size':[*'ABCDEF'],'Com':[*'PGPGPG'], 'Mar':[*'IPIPEA'],
'0':[1,2,3,4,5,6],
'1':[2,2,2,2,2,2],
'2':[3,3,3,3,3,3],
'3':[4,4,4,4,4,4],
'Type':['Lamba1']*2+['Lamba2']*2+['Lamba1']*2})
df1 = df.set_index(['Size','Com','Mar','Type']).T
print(df1)
Входные данные Кадр Вывод:
Size A B C D E F
Com P G P G P G
Mar I P I P E A
Type Lamba1 Lamba1 Lamba2 Lamba2 Lamba1 Lamba1
0 1 2 3 4 5 6
1 2 2 2 2 2 2
2 3 3 3 3 3 3
3 4 4 4 4 4 4
Используйте pd.IndexSlice
и groupby
:
idx = pd.IndexSlice
df_out = df1.loc[:,idx[:,:,'I':'P',:]].T.groupby('Type').diff().dropna().T.rename({'B':'L','D':'L','G':'C','P':'X'}, axis=1)
print(df_out)
Результаты вывода:
Size L
Com C
Mar X
Type Lamba1 Lamba2
0 1.0 1.0
1 0.0 0.0
2 0.0 0.0
3 0.0 0.0