You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何操作列多索引DataFrame?含数据提取与语法疑问

多级列索引DataFrame操作方案

假设你的DataFrame变量名为df,针对你提出的4个操作需求,具体实现代码如下:

1. 获取Level 0的列名列表

通过get_level_values指定层级索引,去重后转成列表:

level0_cols = df.columns.get_level_values(0).unique().tolist()

注:因为每个Level 0指标对应所有Level 1公司,直接取Level 0值会重复,所以用unique()去重。

2. 获取Level 1的列名列表

同理,指定层级为1即可:

level1_cols = df.columns.get_level_values(1).unique().tolist()

3. 提取某一日期下,单个公司的所有财务数据

两种实现方式:

  • 用loc配合slice(None)(代表选中该层级所有值):
# 替换'2023-01-05'为目标日期,'000001'为目标公司代码
single_company_data = df.loc['2023-01-05', (slice(None), '000001')]
  • 用xs方法直接指定层级提取:
single_company_data = df.xs('000001', level=1, axis=1).loc['2023-01-05']

4. 提取某一日期下,单个财务指标的所有公司数据

同样两种方式:

  • 用loc指定目标指标,配合slice(None)选中所有公司:
# 替换'2023-01-05'为目标日期,'收盘价'为目标财务指标
single_metric_data = df.loc['2023-01-05', ('收盘价', slice(None))]
  • 用xs方法提取指定指标列后取对应日期:
single_metric_data = df.xs('收盘价', level=0, axis=1).loc['2023-01-05']

关于你遇到的语法错误解析

你写的df.loc['2023-01-05',([A:],[aa,dd])]有两个问题:

  1. 结构错误:多级列的索引需要是一个元组,每个元素对应一级列的选择逻辑,正确结构是(level0选择, level1选择),而非两个列表组成的结构。
  2. 切片写法错误:[A:]不是合法的Python切片语法,若要选中该层级所有值,需用slice(None)(元组内必须显式写该方法,不能直接用:)。

如果要实现“选中2023-01-05日期下,所有财务指标、指定aa和dd两家公司”的数据,正确写法是:

df.loc['2023-01-05', (slice(None), ['aa', 'dd'])]

内容的提问来源于stack exchange,提问作者AndysPythonStuff

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 06:45:48