【Pandas】pandas DataFrame xs
Pandas2.2 DataFrame
Indexing, iteration
方法 | 描述 |
---|---|
DataFrame.head([n]) | 用于返回 DataFrame 的前几行 |
DataFrame.at | 快速访问和修改 DataFrame 中单个值的方法 |
DataFrame.iat | 快速访问和修改 DataFrame 中单个值的方法 |
DataFrame.loc | 用于基于标签(行标签和列标签)来访问和修改 DataFrame 中的数据 |
DataFrame.iloc | 用于基于整数位置(行号和列号)来访问和修改 DataFrame 中的数据 |
DataFrame.insert(loc, column, value[, …]) | 用于在 DataFrame 的指定位置插入一个新的列 |
DataFrame.iter() | 用于迭代 DataFrame 的列名 |
DataFrame.items() | 用于迭代 DataFrame 的列名和列数据 |
DataFrame.keys() | 返回 DataFrame 的列名 |
DataFrame.iterrows() | 用于逐行迭代 DataFrame |
DataFrame.itertuples([index, name]) | 用于逐行迭代 DataFrame |
DataFrame.pop(item) | 用于从 DataFrame 中删除指定列 |
DataFrame.tail([n]) | 用于返回 DataFrame 的最后 n 行 |
DataFrame.xs(key[, axis, level, drop_level]) | 用于从 DataFrame 中提取一个横截面(cross-section) |
pandas.DataFrame.xs
pandas.DataFrame.xs(key[, axis, level, drop_level])
方法用于从 DataFrame 中提取一个横截面(cross-section),即根据指定的键和轴返回一个 Series 或 DataFrame。
参数
key
:要提取的键。axis
:指定轴,0 或 ‘index’ 表示按行索引提取,1 或 ‘columns’ 表示按列索引提取。默认为 0。level
:如果索引是多级索引,指定要使用的级别。drop_level
:布尔值,表示是否从结果中删除提取的级别。默认为True
。
返回值
- 返回一个 Series 或 DataFrame,取决于提取的内容。
示例
假设我们有一个 DataFrame 如下:
import pandas as pddata = {'A': [1, 2, 3, 4],'B': [5, 6, 7, 8]
}index = pd.MultiIndex.from_tuples([('a', 'x'), ('a', 'y'), ('b', 'x'), ('b', 'y')], names=['first', 'second'])df = pd.DataFrame(data, index=index)
print("原始 DataFrame:")
print(df)
输出:
原始 DataFrame:A B
first second
a x 1 5y 2 6
b x 3 7y 4 8
示例 1:按行索引提取
提取 first
级别为 'a'
的所有行:
result = df.xs('a', level='first')
print("\n提取 first 级别为 'a' 的所有行:")
print(result)
输出:
提取 first 级别为 'a' 的所有行:A B
second
x 1 5
y 2 6
示例 2:按列索引提取
提取列 'A'
:
result = df.xs('A', axis=1)
print("\n提取列 'A':")
print(result)
输出:
提取列 'A':
first second
a x 1y 2
b x 3y 4
Name: A, dtype: int64
示例 3:不删除提取的级别
提取 first
级别为 'a'
的所有行,并保留 first
级别:
result = df.xs('a', level='first', drop_level=False)
print("\n提取 first 级别为 'a' 的所有行,并保留 first 级别:")
print(result)
输出:
提取 first 级别为 'a' 的所有行,并保留 first 级别:A B
first second
a x 1 5y 2 6
示例 4:多级索引提取
提取 first
级别为 'a'
且 second
级别为 'x'
的行:
result = df.xs(('a', 'x'), level=['first', 'second'])
print("\n提取 first 级别为 'a' 且 second 级别为 'x' 的行:")
print(result)
输出:
提取 first 级别为 'a' 且 second 级别为 'x' 的行:
A 1
B 5
Name: (a, x), dtype: int64
通过这些示例,可以看到 xs
方法在处理多级索引和单级索引时的灵活性和强大功能。