将一些DataFrame列重新索引为多索引

时间:2016-09-23 14:38:20

标签: python pandas dataframe multi-index reindex

在我的工作流程中的某个时刻,我最终会得到一个带有一些列和一些行的常规pandas DataFrame。我想使用df.to_latex()将此DataFrame导出到latex表中。这很好用,但是,我知道想要使用多列,其中某些列是多表的一部分。例如,一个包含a,b,c,d,e列的DataFrame,我想要保持列a不变,但是将b和c组合起来,以及d和e组合。

import numpy as np
import pandas as pd

# where I am
data = np.arange(15).reshape(3, 5)
df = pd.DataFrame(data=data, columns=['a', 'b', 'c', 'd', 'e'])

看起来像这样:

In [161]: df
Out[161]: 
    a   b   c   d   e
0   0   1   2   3   4
1   5   6   7   8   9
2  10  11  12  13  14

我想将列b和c以及d和e分组,但请单独留下。所以我想要的输出应该是这样的。

# where I want to be: leave column 'a' alone, group b&c as well as d&e
multi_index = pd.MultiIndex.from_tuples([
    ('a', ''),
    ('bc', 'b'),
    ('bc', 'c'),
    ('de', 'd'),
    ('de', 'e'),
])
desired = pd.DataFrame(data, columns=multi_index)

看起来像这样:

In [162]: desired
Out[162]: 
    a  bc      de    
        b   c   d   e
0   0   1   2   3   4
1   5   6   7   8   9
2  10  11  12  13  14

为了到达那里,我尝试了一个简单的重新索引。这给了我想要的形状,但所有列只有NaN作为值。

# how can use df and my multiindexreindex to multi column DataFrame
result = df.reindex(columns=multi_index)

结果看起来像描述的,正确的索引,但所有NaN

In [166]: result
Out[166]: 
    a  bc      de    
        b   c   e   e
0 NaN NaN NaN NaN NaN
1 NaN NaN NaN NaN NaN
2 NaN NaN NaN NaN NaN

如何获得理想的结果?

2 个答案:

答案 0 :(得分:1)

您可以直接将multiIndex分配给数据框的columns属性:

df.columns = multi_index
df

enter image description here

答案 1 :(得分:1)

{{1}}

enter image description here