基本设置:
我在行和列上都有一个DataFrame
,MultiIndex
。列索引的第二级值为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
中提供此df
:
然后定义我的组操作并应用它:
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
给出:
这里发生了什么?为什么列索引的第二级不按升序显示?
编辑: 就上下文而言:
pd.__version__
Out[28]:
'0.14.0'
In [29]:
np.__version__
Out[29]:
'1.8.1'
任何帮助都非常感激。
答案 0 :(得分:1)
返回的结果看起来像预期的那样。你添加了列。无法保证对这些列强加订单。
您可以重新订购:
result = result[sorted(result.columns)]