我正在寻找一种简单可靠的方法来获取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
希望很清楚
不能说你想得到什么,但要获得聚合函数内的键,你可以从arr
获取第一个元素:
>>> def GetLevel(arr):
... level = arr.iloc[0]['Name']
... return level
不知道是否有更优雅的方法来做到这一点。你也可以看看grouped.groups
,也许你可以从那里获取你需要的信息。
好的,这不是我的问题的答案。只是无法想出如何在评论框中显示代码。
无论如何,在回答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
由于我必须将数据框和聚合列的名称插入到函数中,所以我有点想要避免使用它。