【问题标题】:pandas groupby on multiindex levels: group_keys多索引级别上的 pandas groupby:group_keys
【发布时间】:2018-07-09 10:17:43
【问题描述】:

我有一个 DataFrame,其列是 MultiIndex。 我想对列的一级进行分组并使用 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'])

所需的打印输出:我希望函数 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

【问题讨论】:

  • 只是列标题。 foo 函数打印数据框列,这对我来说是相关的部分。 sum 操作只是一个占位符,让函数运行。
  • 想要的输出描述应该打印什么?为什么你只想打印 1,2 ,3, 4?那么0s呢?忽略它有什么用?
  • 已编辑:希望现在更清晰

标签: python pandas pandas-groupby


【解决方案1】:

与其分组,不如:

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 中的函数
猜你喜欢
  • 2018-09-11
  • 2020-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-26
  • 2016-12-27
  • 2015-04-06
相关资源
最近更新 更多