[英]Pandas groupby Series with DataFrame
我想按一個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對系列進行分組和歸約的正確方法是什么? 或者,這種方法不存在嗎?
一種解決方案是將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()
這里有什么很浪費的嗎? 這種方法的運行速度大約與普通情況下慣用的慣用計算速度相同。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.