对于这个简单的问题抱歉,我是一个相对较新的py用户。
考虑以下最小例子:
df = pd.DataFrame({'A' : ['foo', 'bar', 'foo', 'bar',
'foo', 'bar', 'foo', 'foo'],
'B' : ['one', 'one', 'two', 'three',
'two', 'two', 'one', 'three'],
'C' : range(0,8),
'D' : range(0,8)})
以下引发错误:
def myf(x):
return x[2]
df[["A","C","D"]].groupby('A').aggregate(myf)
所需的输出将是一个像这样的pandas表:
| A | myf C | myf D |
-------------------------
| foo | 2 | 2 |
| bar | 3 | 3 |
从评论和文档中,似乎可以做类似的事情:
def myf(x):
return x.first
获取第一个项目,但是不清楚如何构建一个仍然可以获得适当索引值的非内置方法。类似的东西:
def myf(x):
return Series(x[1], index=x.index)
似乎不起作用。
答案 0 :(得分:1)
来自Aggregation文档 -
聚合函数是减少返回对象维度的函数,例如:mean,sum,size,count,std,var,sem,describe,first,last,nth,min,max。当您执行DataFrame.sum()并返回Series时会发生这种情况。
如果您按照@ DSM的建议并将print(x)
添加到myf
,您就会看到您将Series
传递给index
来自原始DataFrame
的{1}}。因此,如果您通常要求x[1]
,则某些Series
将不会index
。
你可以做return x.iloc[0]
所以你依靠的是位置,而不是基于标签的索引。换句话说,您选择分组Series
中的第一项,而不是恰好具有标签' 1'来自原始DataFrame
。