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

如何获取Pandas交叉表生成的多层索引的上层名称?

解决Pandas Crosstab索引相关问题

你遇到的核心问题是混淆了索引的名称和索引的实际取值:df_test2.index.names返回的是行索引的名称(即你传入crosstab的第一个参数df_test[0]的列名'0'),而你想要的应该是索引的具体取值(或关联原数据的上层标签),以下是对应解决方案:

1. 获取行索引的实际取值(排除Margins的'All')

如果需要crosstab生成的行索引里的具体值(去掉自动添加的汇总行'All'),直接提取并过滤即可:

# 提取所有行索引值转为列表
index_vals = df_test2.index.tolist()
# 过滤掉'All'
target_vals = [v for v in index_vals if v != 'All']
print(target_vals)  # 输出: [1, 4]

2. 生成带原数据上层索引的交叉表

如果你想把原DataFramedf_test的行标签('A'、'B')作为交叉表的上层索引,需要在调用crosstab时传入原索引:

# 传入原行索引和df_test[0]作为行参数,生成多层索引交叉表
df_test2 = pd.crosstab([df_test.index, df_test[0]], df_test[1], margins=True)
# 获取上层索引的名称(若原索引无名称,可先设置df_test.index.name='Category')
upper_index_name = df_test2.index.names[0]
# 获取上层索引的唯一取值
upper_index_vals = df_test2.index.get_level_values(0).unique().tolist()
print(upper_index_vals)  # 输出: ['A', 'B', 'All']

3. 若你实际需要列索引的取值

如果你的期望列表['1','2','5']是笔误(比如把列名'1'和列索引取值2、5混淆),获取列索引取值的操作类似:

col_vals = df_test2.columns.tolist()
filtered_cols = [v for v in col_vals if v != 'All']
print(filtered_cols)  # 输出: [2, 5]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 22:35:30