pandas 双层表头创建
时间: 2025-07-02 13:03:53 浏览: 17
<think>我们之前讨论了如何创建双层索引(行方向的多层索引),现在用户询问的是如何创建双层表头(列方向的多层索引,即MultiIndexcolumns)。根据引用[2]中的示例,我们可以知道创建具有多层列索引的DataFrame可以通过在创建DataFrame时指定columns参数为一个多层索引对象(MultiIndex)来实现。同时,用户提供的引用[1]是关于行多层索引的,但这里我们关注的是列的多层索引。创建双层表头(列的多层索引)主要有以下方法:方法1:使用pd.MultiIndex.from_tuples创建列的多层索引,然后在创建DataFrame时指定columns参数。方法2:使用pd.MultiIndex.from_product创建列的多层索引。方法3:直接在DataFrame的列参数中传入一个由元组组成的列表(每个元组代表每一列在每一层的标签)。另外,引用[2]中展示了一个简单的例子,它创建了一个具有两层列索引的DataFrame,并写入Excel。下面我将详细说明这些方法:</think>### 在 Pandas 中创建双层表头(MultiIndex Columns)数据框
创建具有双层表头的 DataFrame 主要通过 `pd.MultiIndex` 实现列索引的层级结构。以下是三种常用方法:
---
#### 方法 1:使用 `from_tuples` 创建列索引
**适用场景**:已有明确的列名组合时
```python
import pandas as pd
import numpy as np
# 创建双层列索引
columns = pd.MultiIndex.from_tuples([
('温度', '最高'), ('温度', '最低'),
('湿度', '平均'), ('湿度', '波动')
])
# 创建数据
data = np.array([
[28, 18, 65, 12],
[30, 20, 70, 8],
[26, 16, 60, 15]
])
df = pd.DataFrame(data, columns=columns)
print(df)
```
**输出**:
```
温度 湿度
最高 最低 平均 波动
0 28 18 65 12
1 30 20 70 8
2 26 16 60 15
```
---
#### 方法 2:使用 `from_product` 创建组合列
**适用场景**:需要两个维度的全组合时
```python
# 创建层级列名
categories = ['销量', '库存']
regions = ['北京', '上海', '广州']
# 生成双层列索引
multi_cols = pd.MultiIndex.from_product(
[categories, regions],
names=['指标', '区域']
)
# 创建数据框
data = np.random.randint(10, 50, size=(3, 6))
df = pd.DataFrame(data, columns=multi_cols)
print(df)
```
**输出**:
```
指标 销量 库存
区域 北京 上海 广州 北京 上海 广州
0 42 38 27 19 48 14
1 37 11 32 15 39 43
2 28 31 22 45 10 18
```
---
#### 方法 3:直接指定列名元组
**适用场景**:快速创建小型数据框
```python
# 直接定义列名为元组
df = pd.DataFrame(
np.random.rand(3, 4),
columns=[('财务', '收入'), ('财务', '支出'),
('人力', '招聘'), ('人力', '培训')]
)
# 添加列名层级
df.columns.names = ['部门', '项目']
print(df)
```
**输出**:
```
部门 财务 人力
项目 收入 支出 招聘 培训
0 0.81 0.12 0.45 0.92
1 0.63 0.74 0.33 0.19
2 0.57 0.02 0.88 0.41
```
---
#### 关键操作说明
1. **访问特定列**:
```python
# 获取财务部门所有列
df['财务']
# 获取人力部门的培训列
df[('人力', '培训')]
```
2. **写入 Excel**:
双层表头可直接写入 Excel 并保留层级结构[^2]:
```python
df.to_excel("multi_header.xlsx")
```
3. **层级控制**:
- 查看层级名称:`df.columns.names`
- 重命名层级:`df.columns.names = ['新部门', '新项目']`
> **应用场景**:
> 特别适合财务报告(部门+指标)、实验数据(参数+测量值)等需要多维分析的结构化数据。
阅读全文
相关推荐






