聚合在使用索引的函数上失败

时间:2015-12-02 20:45:59

标签: python pandas

对于这个简单的问题抱歉,我是一个相对较新的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)

似乎不起作用。

1 个答案:

答案 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