熊猫在多索引级别上的groupby:group_keys - python

我有一个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

python参考方案

与其分组,不如:

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]

Python pytz时区函数返回的时区为9分钟 - python

由于某些原因,我无法从以下代码中找出原因:>>> from pytz import timezone >>> timezone('America/Chicago') 我得到:<DstTzInfo 'America/Chicago' LMT-1 day, 18:09:00 STD…

Python:同时在for循环中添加到列表列表 - python

我想用for循环外的0索引值创建一个新列表,然后使用for循环添加到相同的列表。我的玩具示例是:import random data = ['t1', 't2', 't3'] masterlist = [['col1', 'animal1', 'an…

用大写字母拆分字符串,但忽略AAA Python Regex - python

我的正则表达式:vendor = "MyNameIsJoe. I'mWorkerInAAAinc." ven = re.split(r'(?<=[a-z])[A-Z]|[A-Z](?=[a-z])', vendor) 以大写字母分割字符串,例如:'我的名字是乔。 I'mWorkerInAAAinc”变成…

用逗号格式化数字以在Python中分隔成千上万 - python

我有一个大数据框,其中有一列称为Lead Rev。此列是一个数字字段,例如(100000或5000等)。我想知道如何格式化这些数字以将逗号显示为千位分隔符。数据集有超过200,000行。是这样的吗:'{:,}'.format('Lead Rev')这给出了这个错误:---------------------------…

快捷项目分配。无法将loc用于项目分配 - python

我有一个无法容纳在内存中的镶木地板文件文件夹,因此我正在使用dask来执行数据清理操作。我有一个要执行项目分配的功能,但似乎找不到任何在线解决方案可作为该特定功能的解决方案。以下是在熊猫中起作用的功能。如何在dask数据框中获得相同的结果?我认为延迟可能会有所帮助,但是我尝试编写的所有解决方案都没有起作用。def item_assignment(df): n…