在pandas datafram中生成多索引列

2024-04-24 03:12:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个熊猫数据框,其结构如下:

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_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岁,所以这不是很实用。

有人能告诉我怎样用程序的方法从元组中设置多索引列吗。


Tags: columns数据fromimportdfasnp结构
2条回答

Jaco的答案很好,但您甚至可以使用.from_product()直接从产品中创建MultiIndex

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

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

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']

相关问题 更多 >