2016-03-02 185 views
1

我有一個具有以下晶格結構一個大熊貓數據幀多指標列:從原來的電子表格做的熊貓數據幀

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的列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) 

然後命名列索引:

df.columns.names = ['Sex', 'Age'] 

這給了我希望的結果。然而,我的數據框每個性別的年齡都超過100,所以這不太實際。

有人請指導我如何以編程方式從元組中設置MultiIndex列。

回答

2

雅科的回答工作得很好,但你甚至可以創建從產品一個MultiIndex直接使用.from_product()

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

可以使用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'] 
+0

很好的解決方案! – MaxU