[英]Make multiindex columns in a pandas dataframe
我有一個具有以下結構的熊貓數據框:
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',])
列名稱雜亂無章,標題名稱中包含兩個變量以及原始電子表格中的殘留標點符號。
我想做的是在我的數據框中設置一個名為“性別和年齡”的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列。
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']
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.