Python 在数据帧中生成多索引列

Python 在数据帧中生成多索引列,python,pandas,Python,Pandas,我有一个具有以下结构的熊猫数据帧: import numpy as np import pandas as pd df = pd.DataFrame(np.arange(32).reshape((4,8)), index = pd.date_range('2016-01-01', periods=4), columns=['male ; 0', 'male ; 1','male ; 2','male ; 4','female ; 0','fem

我有一个具有以下结构的熊猫数据帧:

import numpy as np
import pandas as pd

df = pd.DataFrame(np.arange(32).reshape((4,8)), 
            index = pd.date_range('2016-01-01', periods=4),
            columns=['male ; 0', 'male ; 1','male ; 2','male ; 4','female ; 0','female ; 1','female ; 2','female ; 3',])
由于标题名中包含两个变量,以及原始电子表格中的剩余标点符号,列名非常混乱

我想做的是在我的数据框中设置一个名为sex和age的列多索引

我尝试使用
pd.MultiIndex.from\u tuples
如下:

columns = [('Male', 0),('Male', 1),('Male', 2),('Male', 3),('Female', 0),('Female', 1),('Female', 2),('Female', 3)]
df.columns = pd.MultiIndex.from_tuples(columns)
然后命名列索引:

df.columns.names = ['Sex', 'Age']
这给出了我想要的结果。然而,我的数据帧对于每种性别的年龄都超过100岁,所以这不是很实用


有人可以指导我如何通过编程从元组设置多索引列。

您可以使用
itertools
模块生成
变量,方法是采用数据中性别和年龄范围的笛卡尔连接,例如:

import itertools
max_age = 100
sex = ['Male','Female']
age = range(max_age)
columns=list(itertools.product(sex, age))
df.columns = pd.MultiIndex.from_tuples(columns)
df.columns.names = ['Sex', 'Age']

Jaco的答案很好,但您甚至可以直接使用
从产品创建
多索引

sex = ['Male', 'Female']
age = range(100)
df.columns = pd.MultiIndex.from_product([sex, age], names=['Sex', 'Age'])