У меня есть фрейм данных с мультииндексом для столбцов, определенных следующим образом:
import numpy as np
import pandas as pd
index = range(4)
columns = pd.MultiIndex.from_product([
['A0', 'B0'],
['A1', 'B1'],
['A2', 'B2']
])
data = np.random.rand(len(index), len(columns))
df = pd.DataFrame(data, index=index, columns=columns)
Это дает мне что-то вроде:
A0 B0
A1 B1 A1 B1
A2 B2 A2 B2 A2 B2 A2 B2
0 0.523564 0.270243 0.881117 0.760946 0.687436 0.318483 0.963247 0.161210
1 0.141363 0.563427 0.242174 0.966277 0.382161 0.486944 0.417305 0.513510
2 0.832275 0.036995 0.510963 0.112446 0.069597 0.490321 0.022453 0.643659
3 0.601649 0.705902 0.735125 0.506853 0.666612 0.533352 0.484133 0.069325
Теперь я хочу отфильтровать всестроки, в которых значение любого из столбцов B2
ниже порогового значения, например, 0.05
.Я сделал следующее:
df_filtered = df[df.loc[:, (slice(None), slice(None), 'B2')] < 0.05]
Но это дает мне следующее:
A0 B0
A1 B1 A1 B1
A2 B2 A2 B2 A2 B2 A2 B2
0 NaN NaN NaN NaN NaN NaN NaN NaN
1 NaN NaN NaN NaN NaN NaN NaN NaN
2 NaN 0.036995 NaN NaN NaN NaN NaN NaN
3 NaN NaN NaN NaN NaN NaN NaN NaN
Это не то, что я хочу, потому что:
- значения строкикаким-то образом отображаются на
NaN
.Я хочу сохранить исходное содержимое строки. - все строки возвращаются.Мне нужны только строки, где любое из значений
B2
меньше 0.05
, в этой строке только с index=2
.
Как мне этого добиться?