我正在寻找一种简单可靠的方法来获取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
希望很清楚
答案 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
因为我必须将数据框的名称和聚合列插入到函数中,所以我有点想避免这种情况。