Pandas在多级索引上进行groupby操作:group_keys

4
我有一个列为MultiIndex的DataFrame。我想按照一级列进行分组,并使用apply执行转换。
目标:我希望通过使用apply传递给函数的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'])

希望输出的打印结果为:如果我使用group_keys=False,那么我希望函数foo接收到仅包含feat_2列的数据框。
[0, 1, 2, 3, 4]
[0, 1, 2, 3, 4]
[0, 1, 2, 3, 4]

我是否错过了文档中的某些内容?或者我如何实现我想要的(可能不需要修改函数foo)?

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


只需要列标题。foo函数打印数据框的列,这对我来说是相关的部分。sum操作只是一个占位符,用于使函数运行。 - FLab
期望的输出是描述应该打印什么吗?为什么您只想打印1、2、3、4?0呢?忽略它的用途是什么? - Tai
1
以下是有关编程的内容,请将其翻译成中文。只返回翻译后的文本:希望现在更清晰了 - FLab
1个回答

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]

循环在我有更多层级时变得非常混乱...加上目标不是打印/检索列,而是将只有一级列的数据框传递给groupby函数。 - FLab

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接