Pandas groupby系列与DataFrame

时间:2014-05-29 02:39:24

标签: python pandas

我想通过DataFrame对Series进行分组,然后执行缩减,如下例所示:

In [1]: from pandas import DataFrame

In [2]: df = DataFrame([['Alice', 'F', 100, 1],
                        ['Alice', 'F', 100, 3],
                        ['Drew', 'F', 100, 4],
                        ['Drew', 'M', 100, 5],
                        ['Drew', 'M', 200, 5]],
                       columns=['name', 'sex', 'amount', 'id'])

In [3]: df['amount'].groupby(df[['name', 'sex']]).count()

不幸的是,这会引发以下TypeError,让我难以理解

TypeError: 'DataFrame' object is not callable

我知道我可以直接使用列名,但我的实际计算需要比这更通用,并认为这是可行的。这里发生了什么?通过任意DataFrame对系列进行分组和缩小的正确方法是什么?或者,这种方式不存在吗?

1 个答案:

答案 0 :(得分:0)

一种解决方案是将Series转换为DataFrame,连接到分组器DataFrame,然后在分组器的列上分组,然后重新选择分组的列。即

# Example inputs
pregrouped = df['amount']
grouper = df[['name', 'sex']]

# General computation
pregrouped = DataFrame(pregrouped)
grouper = DataFrame(grouper) 

full = grouper.join(pregrouped)
groups = full.groupby(list(grouper.columns))[list(pregrouped.columns)]
result = groups.some_reduction()[list(pregrouped.columns)].reset_index()

这里有什么浪费吗?这种方法的运行速度大约是常见情况下正常惯用计算的速度。