我有一个带有以下strcuture的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','female ; 1','female ; 2','female ; 3',])
Run Code Online (Sandbox Code Playgroud)
列名称混乱,标题名称中包含两个变量的组合,以及原始电子表格中的残余标点符号.
我想要做的是在我的数据帧中设置一个名为sex和age的MultiIndex列.
我尝试使用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)
Run Code Online (Sandbox Code Playgroud)
然后命名列索引:
df.columns.names = ['Sex', 'Age']
Run Code Online (Sandbox Code Playgroud)
这给出了我想要的结果.但是,我的数据帧每个性别的年龄都超过100,所以这不太实用.
有人可以指导我如何以编程方式从元组中设置MultiIndex列.
Jaco的答案效果很好,但您甚至可以直接使用以下MultiIndex产品创建产品:.from_product()
sex = ['Male', 'Female']
age = range(100)
df.columns = pd.MultiIndex.from_product([sex, age], names=['Sex', 'Age'])
Run Code Online (Sandbox Code Playgroud)
您可以使用该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']
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6539 次 |
| 最近记录: |