pandas groupby on multiindex levels:group_keys

时间:2018-01-30 13:44:13

标签: python pandas pandas-groupby

我有一个DataFrame,其列是MultiIndex。 我想分组列的一个级别并使用apply来执行转换。

目标:我希望使用apply not 传递给函数的DataFrame在索引中具有groupby的键。

docs看起来这就是group_keys正在做的事情,但似乎没有效果:

import numpy as np
import pandas as pd

data = {'A': pd.DataFrame(np.random.randn(100, 5)),
        'B': pd.DataFrame(np.random.randn(100, 5)),
        'C': pd.DataFrame(np.random.randn(100, 5))}

data = pd.concat(data, axis=1, names=['feat_1', 'feat_2'])

def foo(df):
    print(df.columns)
    return df.sum(1)

我的尝试:

result = data.groupby(level=['feat_1'], axis=1, group_keys=False).apply(foo)

这是在屏幕上打印的内容:

MultiIndex(levels=[['A', 'B', 'C'], [0, 1, 2, 3, 4]],
           labels=[[0, 0, 0, 0, 0], [0, 1, 2, 3, 4]],
           names=['feat_1', 'feat_2'])
MultiIndex(levels=[['A', 'B', 'C'], [0, 1, 2, 3, 4]],
           labels=[[1, 1, 1, 1, 1], [0, 1, 2, 3, 4]],
           names=['feat_1', 'feat_2'])
MultiIndex(levels=[['A', 'B', 'C'], [0, 1, 2, 3, 4]],
           labels=[[2, 2, 2, 2, 2], [0, 1, 2, 3, 4]],
           names=['feat_1', 'feat_2'])

所需的打印输出:我希望函数foo能够接收仅包含feat_2列的数据框,因为我使用的是group_keys=False

[0, 1, 2, 3, 4]
[0, 1, 2, 3, 4]
[0, 1, 2, 3, 4]

我遗漏了文档中的内容吗?或者我如何实现我想要的(可能没有修改函数foo)?

注意:我在Python 3上使用pandas 0.20.3

1 个答案:

答案 0 :(得分:0)

而不是分组,如何:

for feat1 in data.columns.levels[0]:
    print(list(data.columns.levels[1]))

[0, 1, 2, 3, 4]
[0, 1, 2, 3, 4]
[0, 1, 2, 3, 4]