【问题标题】:Make multiindex columns in a pandas dataframe在熊猫数据框中创建多索引列
【发布时间】:2016-06-16 01:45:45
【问题描述】:

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

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 列。

【问题讨论】:

    标签: python pandas


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2016-02-05
        • 2020-11-21
        • 2016-01-13
        • 1970-01-01
        • 2015-03-22
        • 1970-01-01
        • 2017-05-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多