У меня есть следующий мультииндексный DataFrame:
0 M1 M2
bla C LQ C LQ
0 1 1.6 0.1 2.7 0.5
1 2 <LQ 0.2 4.1 0.3
2 3 NaN NaN NaN NaN
3 4 3.2 0.1 <LQ 0.4
Кроме того, я создал маску, где 'C'
равен "<LQ"
, отбрасывая 2-й уровень
mask = df.xs('C',level=1, axis=1) == "<LQ"
Iхотелось бы
- заменить
'<LQ'
значением в соответствующем столбце 'LQ'
- удалить столбцы
'LQ'
и уменьшить столбцы до одного уровня, сохраняя имяпервого уровня, где вторым уровнем является ['C', 'LQ']
, и оставляя имя второго уровня для остальных, как это:
:
bla M1 M2
0 1 1.6 2.7
1 2 0.2 4.1
2 3 NaN NaN
3 4 3.2 0.4
при отслеживаниизамененные значения с использованием маски (например, для последующего построения графика)
Код для генерации df:
df = pd.DataFrame({(0,'bla'): [1,2,3,4],
('M1', 'C'): [1.6,'<LQ',np.nan,3.2],
('M1', 'LQ'): [0.1,0.2,np.nan,0.1],
('M2', 'C'): [2.7,4.1,np.nan,'<LQ'],
('M2', 'LQ'): [0.5,0.3,np.nan,0.4]})