簡體   English   中英

帶有DataFrame的Pandas groupby系列

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM