Python pandas按Name分组求和Amount并条件统计Fruit次数的实现问题
问题解决:Pandas分组同时实现求和与条件计数
你原代码的问题在于只在aggfunc中指定了Amount列的求和逻辑,未对Fruit列配置条件计数的聚合规则,因此无法生成统计Apple出现次数的Count列。
示例数据构造(可直接运行验证)
import pandas as pd import numpy as np df = pd.DataFrame({ 'Name': ['Bob', 'Bob', 'Bill', 'Bill', 'Bill'], 'Fruit': ['Apple', 'Orange', 'Apple', 'Orange', 'Apple'], 'Amount': [5,7,4,8,3] })
方案1:使用groupby+agg(更直观推荐)
res = df.groupby('Name', as_index=False).agg( Sum=('Amount', 'sum'), Count=('Fruit', lambda x: (x == 'Apple').sum()) )
方案2:调整pivot_table写法
res = pd.pivot_table( df, index='Name', aggfunc={ 'Amount': np.sum, 'Fruit': lambda x: (x == 'Apple').sum() } ).rename(columns={'Amount': 'Sum', 'Fruit': 'Count'}).reset_index()
两种方案输出结果均符合预期:
| Name | Sum | Count |
|---|---|---|
| Bob | 12 | 1 |
| Bill | 15 | 2 |
内容的提问来源于stack exchange,提问作者campbeb2
相关产品推荐
相关产品推荐

