在聚合函数中获得分组级别

问题描述:

我正在寻找一种简单可靠的方法来获取聚合函数内的分组级别,以便为熊猫groupby对象。在聚合函数中获得分组级别

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

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

我使用GetLevel函数里面什么命令返回“富”,然后“吧”?

​​

希望是十分明显的

+1

你在找什么结果? –

+0

最终,我想要做的是将组中的项目与同一列中的所有其他剩余项目进行比较。更具体地说,比较显着性检验,寻找组中调查反应的比例差异,与所有其他组中的调查反应进行比较(使用R prop.test至rpy2) – dreme

行,这是不是对我的问题的答案。只是无法计算如何在评论框中显示代码。

总之,在回答下面安迪的问题,这里是返回我说的是IndexError消息的函数的例子:

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

你会看到它同罗马的功能,除了添加了对arr.name的colname分配。奇怪的是,如果我删除了两个任务中的任何一个,我就不会有任何错误,但它不会对两者都起作用。这就像一个指针在第一次调用arr的属性后被移动或者改变了。

然而,我发现,这确实工作:

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

这是一个有点缺憾,因为我要插入数据框的名称和聚集列进功能,这是我希望避免。

+0

你应该编辑这个到你自己的问题。这可能是你必须从名称而不是名称中选择一个项目......(稍后会看一看)。 –

不能说你想要得到的东西,但要获得聚合函数内部键,你可以第一个元素arr

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

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

+0

是的,其工作原理同样如此:level = arr.values [0] [0] 但是,这是奇怪的事情。如果我在arr属性的函数中添加另一个调用,这两种解决方案都会产生错误。例如,以下功能失败: def Getlevel(arr):,例如arr.name。 – dreme

+0

对不起,不得不重做最后的评论,格式化有问题。正如我说你的解决方案工作,但失败与IndexError,如果我添加一个语句在调用另一个ARR属性,如说,** print arr.name **的函数。不知何故,似乎只是在arr中访问一个属性实际上正在改变它。 – dreme

+0

@dreme你可以举一个实际的例子... –