我想通过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对系列进行分组和缩小的正确方法是什么?或者,这种方式不存在吗?
答案 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()
这里有什么浪费吗?这种方法的运行速度大约是常见情况下正常惯用计算的速度。