【问题标题】:Pandas sort_index gives strange result after applying function to grouped DataFramePandas sort_index 在将函数应用于分组数据帧后给出了奇怪的结果
【发布时间】:2014-08-13 10:41:00
【问题描述】:

基本设置:

我在行和列上都有一个DataFrame 和一个MultiIndex。列索引的第二级有 floats 的值。

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

当我从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)

df 中给出这个DataFrame

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

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 给出:

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

编辑: 就上下文而言:

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

np.__version__
Out[29]:
'1.8.1'

非常感谢任何帮助。

【问题讨论】:

  • 你能发布你的 pandas/numpy 版本吗?可能是浮点索引排序的问题
  • 张贴在上面,谢谢杰夫

标签: python pandas


【解决方案1】:

返回的结果符合预期。您添加了列。无法保证对这些列施加的顺序。

你可以重新订购:

result = result[sorted(result.columns)]

【讨论】:

  • 虽然这是一个不错的选择,但我认为 OP 期望调用 sort_index(axis=1) 来达到相同的结果。
  • unutbu,完全正确。为什么sort_index 电话无法完成工作?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-03-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-05
  • 2021-12-30
  • 2017-02-02
  • 1970-01-01
相关资源
最近更新 更多