Метод xs
Метод xs применяется к DataFrame
и возвращает перекрестный срез данных по указанным меткам
из иерархического индекса или мультииндекса столбцов.
Основными параметрами являются key - метка для извлечения,
axis - ось, по которой выполняется выборка (по умолчанию 0 для строк),
level - уровень индекса или столбцов для поиска метки,
и drop_level - флаг, определяющий, нужно ли удалять
выбранный уровень из результата (по умолчанию True).
Метод позволяет гибко извлекать данные из таблиц со сложной индексацией.
Синтаксис
df.xs(key, axis=0, level=None, drop_level=True)
Пример
Давайте создадим таблицу с мультииндексом по строкам и извлечем данные для первого уровня:
import pandas as pd
df = pd.DataFrame(
{
'a': [1, 2, 3, 4, 5],
'b': [10, 20, 30, 40, 50]
},
index=pd.MultiIndex.from_tuples(
[('x', 1), ('x', 2), ('y', 1), ('y', 2), ('z', 1)]
)
)
print(df.xs('x'))
Результат выполнения кода:
a b
1 1 10
2 2 20
Пример
Теперь извлечем данные для второго уровня индекса, указав уровень явно:
import pandas as pd
df = pd.DataFrame(
{
'a': [1, 2, 3, 4, 5],
'b': [10, 20, 30, 40, 50]
},
index=pd.MultiIndex.from_tuples(
[('x', 1), ('x', 2), ('y', 1), ('y', 2), ('z', 1)]
)
)
print(df.xs(2, level=1))
Результат выполнения кода:
a b
x 2 20
y 4 40
Пример
Давайте используем мультииндекс по столбцам и извлечем данные для выбранного уровня:
import pandas as pd
df = pd.DataFrame(
{
('x', 'a'): [1, 2, 3],
('x', 'b'): [10, 20, 30],
('y', 'c'): [4, 5, 6]
}
)
print(df.xs('x', axis=1))
Результат выполнения кода:
a b
0 1 10
1 2 20
2 3 30
Пример
В этом примере мы извлечем данные с сохранением уровня индекса с помощью параметра drop_level:
import pandas as pd
df = pd.DataFrame(
{
'a': [1, 2, 3, 4],
'b': [10, 20, 30, 40]
},
index=pd.MultiIndex.from_tuples(
[('x', 1), ('x', 2), ('y', 1), ('y', 2)]
)
)
print(df.xs('x', drop_level=False))
Результат выполнения кода:
a b
x 1 1 10
2 2 20