DataFrame.xs(key, axis=0, level=None, drop_level=True)
返回Series
/DataFrame
的横截面(cross-section)
该方法使用一个关键参数来选择多索引特定级别的数据。
参数: | key : label包含在索引中,或部分包含在多索引中。 axis : {0 或 ‘index’, 1 或 ‘columns’}, 默认 0 轴上检索横截面(cross-section)。 level : 如果key部分包含在多索引中,请指示使用了哪些级别。 级别可以通过label 或 position来引用。 drop_level : 如果为 |
返回: |
与所选索引级别对应的原始 或 |
注意:
xs
不能用于设置值。
多索引切片器是在任何级别上获取/设置值的通用方法。它是xs
功能的超集,参见MultiIndex Slicers。
例子,
1)单层索引
import pandas as pd # 创建一个示例 DataFrame data = { 'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9] } df = pd.DataFrame(data, index=['row1', 'row2', 'row3']) # 使用 xs 获取指定行 row = df.xs('row2') print("指定行:\n", row) # 输出: # A 2 # B 5 # C 8 # Name: row2, dtype: int64
2)多级索引
import pandas as pd # 创建一个带有多级索引的行索引的 DataFrame arrays = [ ['bar', 'bar', 'baz', 'baz', 'foo', 'foo', 'qux', 'qux'], ['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two'] ] index = pd.MultiIndex.from_arrays(arrays, names=['first', 'second']) df = pd.DataFrame({'A': range(8), 'B': range(8, 16)}, index=index) # 显示原始的带有多级索引的 DataFrame print("Original DataFrame with MultiIndex:\n", df) # 使用 xs 获取多级索引中指定级别的行 level_row = df.xs('bar', level='first') print("\n多级索引中指定级别的行:\n", level_row) # 获取多级索引中指定级别的行和列的值 specific_value = df.xs(('bar', 'one')) print("\n多级索引中指定级别的行和列的值:\n", specific_value) # 创建一个带有多级索引的列索引的 DataFrame columns = pd.MultiIndex.from_tuples([('A', 'one'), ('B', 'two')], names=['col1', 'col2']) df_multi_col = pd.DataFrame(df.values, index=index, columns=columns) # 显示带有多级索引的列索引的 DataFrame print("\nDataFrame with MultiIndex columns:\n", df_multi_col) # 使用 xs 获取多级索引中指定级别的列 level_col = df_multi_col.xs('one', level='col2', axis=1) print("\n多级索引中指定级别的列:\n", level_col)
3)使用示例
import pandas as pd # 创建一个示例 DataFrame d = { 'num_legs': [4, 4, 2, 2], 'num_wings': [0, 0, 2, 2], 'class': ['mammal', 'mammal', 'mammal', 'bird'], 'animal': ['cat', 'dog', 'bat', 'penguin'], 'locomotion': ['walks', 'walks', 'flies', 'walks'] } df = pd.DataFrame(data=d) df = df.set_index(['class', 'animal', 'locomotion']) # 对多级索引进行排序 df = df.sort_index() # 显示设置多级索引并排序后的 DataFrame print("Original DataFrame with MultiIndex:\n", df) # 获取指定索引处的值 mammal_df = df.xs('mammal') print("\nValues at 'mammal' index:\n", mammal_df) # 获取多个索引处的值 mammal_dog_df = df.xs(('mammal', 'dog')) print("\nValues at ('mammal', 'dog') index:\n", mammal_dog_df) # 获取指定索引和级别(level)的值 cat_df = df.xs('cat', level=1) print("\nValues at 'cat' level=1 index:\n", cat_df) # 获取多个索引和级别的值 bird_walks_df = df.xs(('bird', 'walks'), level=[0, 'locomotion']) print("\nValues at ('bird', 'walks') level=[0, 'locomotion'] index:\n", bird_walks_df) # 获取指定列和轴上的值 num_wings_series = df.xs('num_wings', axis=1) print("\nValues of 'num_wings' column:\n", num_wings_series)