获取agg函数的分组级别

问题描述 投票:1回答:2

我正在寻找一种简单可靠的方法来获取pandas groupby对象的agg函数内的分组级别。

因此,例如,对于以下组对象和agg命令:

import pandas as pd
df = pd.DataFrame({'Name': ['foo', 'bar'] * 3,
                   'Rank': range(6)})
grouped = df.groupby('Name')
result = grouped.agg(GetLevel)

我在GetLevel函数中使用什么命令来返回'foo'然后'bar'?

def GetLevel(arr):
    level = arr.????
    return level

希望很清楚

pandas dataframe grouping
2个回答
0
投票

不能说你想得到什么,但要获得聚合函数内的键,你可以从arr获取第一个元素:

>>> def GetLevel(arr):
...     level = arr.iloc[0]['Name']
...     return level

不知道是否有更优雅的方法来做到这一点。你也可以看看grouped.groups,也许你可以从那里获取你需要的信息。


0
投票

好的,这不是我的问题的答案。只是无法想出如何在评论框中显示代码。

无论如何,在回答Andy的问题时,下面是一个函数示例,它返回我正在讨论的IndexError消息:

def GetLevel(arr):
    level = arr.iloc[0]['Name']
    colname = arr.name
    return level

您会看到它与Roman的函数相同,只是在arr.name中添加了colname赋值。奇怪的是,如果我删除两个任务中的任何一个,我没有得到任何错误,但它不适用于两者。它就像一个指针被移动或者在第一次调用arr的属性后发生了某些变化。

但是,我发现这确实有效:

def Getlevel(arr):
    x = arr.index[0]
    colname = arr.name
    level = df.loc[x,'Name']
    return level

由于我必须将数据框和聚合列的名称插入到函数中,所以我有点想要避免使用它。

© www.soinside.com 2019 - 2024. All rights reserved.