基于Project_ID和ANIMALS(仅CATS)对Quantity列求和的Pandas问题
问题解决:针对指定类别对DataFrame列求和
原代码问题分析
- 未先过滤
ANIMALS列的CATS类别,会错误统计所有动物类型的数据 groupby后使用lambda x: x.drop_duplicates(...)完全多余:分组后每组内的PROJECT_ID和ANIMALS值是唯一的,无需去重;且agg中传入的x是分组后的QUANTITY列(Series类型),根本没有PROJECT_ID和ANIMALS列,会触发KeyError
正确实现步骤
- 过滤目标类别:先筛选出
ANIMALS为CATS的行 - 分组求和:按
PROJECT_ID和ANIMALS分组,直接对QUANTITY列求和 - 格式整理:将分组结果转为常规DataFrame结构
完整代码
# 1. 筛选仅包含CATS的行 filtered_df = df[df['ANIMALS'] == 'CATS'] # 2. 按指定列分组并对QUANTITY求和,同时重置索引 new_df = filtered_df.groupby(['PROJECT_ID', 'ANIMALS'])['QUANTITY'].sum().reset_index() # 查看结果 new_df.tail(50)
补充说明
- 如果不需要在结果中保留
ANIMALS列(因为已经都是CATS),可以简化分组逻辑:filtered_df.groupby('PROJECT_ID')['QUANTITY'].sum().reset_index() reset_index()的作用是将分组后的索引转为普通列,让结果更符合常规DataFrame的使用习惯
内容的提问来源于stack exchange,提问作者newbie_1900
相关产品推荐
相关产品推荐

