获取agg函数的分组级别

时间:2013-11-25 07:29:47

标签: pandas dataframe grouping

我正在寻找一种简单可靠的方法来获取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

希望很清楚

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

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

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

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

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

但是,我发现这个 工作:

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

因为我必须将数据框的名称和聚合列插入到函数中,所以我有点想避免这种情况。