将函数应用于分组的DataFrame后,Pandas sort_index会给出奇怪的结果

时间:2014-08-12 22:20:55

标签: python pandas

基本设置:

我在行和列上都有一个DataFrameMultiIndex。列索引的第二级值为float s。

我想执行groupby操作(按行索引的第一级分组)。该操作将向每个组添加几个列(也带有float s作为其标签),然后返回该组。

当我从groupby操作中得到结果时,我似乎无法正确排序列。

工作示例。首先,进行设置:

import pandas as pd
import numpy as np

np.random.seed(0)

col_level_1 = ['red', 'blue']
col_level_2 = [1., 2., 3., 4.]

row_level_1 = ['a', 'b']
row_level_2 = ['one', 'two']

col_idx = pd.MultiIndex.from_product([col_level_1, col_level_2], names=['color', 'numeral'])
row_idx = pd.MultiIndex.from_product([row_level_1, row_level_2], names=['letter', 'number'])

df = pd.DataFrame(np.random.randn(len(row_idx), len(col_idx)), index=row_idx, columns=col_idx)

DataFrame中提供此dfenter image description here

然后定义我的组操作并应用它:

def mygrpfun(group):
    for f in [1.5, 2.5, 3.5]:
        group[('red', f)] = 'hello'
        group[('blue', f)] = 'world'
    return group

result = df.groupby(level='letter').apply(mygrpfun).sort_index(axis=1)

显示result给出: enter image description here

这里发生了什么?为什么列索引的第二级不按升序显示?

编辑: 就上下文而言:

pd.__version__
Out[28]:
'0.14.0'
In [29]:

np.__version__
Out[29]:
'1.8.1'

任何帮助都非常感激。

1 个答案:

答案 0 :(得分:1)

返回的结果看起来像预期的那样。你添加了列。无法保证对这些列强加订单。

您可以重新订购:

result = result[sorted(result.columns)]