如何对Pandas DataFrame分组并计算指定列的总和?
按Plan分组计算Quantity_y总和的解决方案
原始数据
Plan | Quantity_y Starter | 1 Intermediate | 1 Intermediate | 1 Intermediate | 2 Intermediate | 1 Intermediate | 14 Intermediate | 1 Advanced | 1 Advanced | 1 Advanced | 2 Advanced | 1 Incredible | 1 Incredible | 1 Incredible | 1 Incredible | 1 Incredible | 1 Incredible | 2 Incredible | 2
期望结果
Plan | Quantity_y Starter | 1 Intermediate | 20 Advanced | 5 Incredible | 9
解决方案(Pandas)
直接用Pandas内置的groupby+sum方法就能高效实现,这比手动用iterrows()或自定义apply()简洁且性能更好:
import pandas as pd # 1. 如果数据从文本/文件读取: data = """Plan | Quantity_y Starter | 1 Intermediate | 1 Intermediate | 1 Intermediate | 2 Intermediate | 1 Intermediate | 14 Intermediate | 1 Advanced | 1 Advanced | 1 Advanced | 2 Advanced | 1 Incredible | 1 Incredible | 1 Incredible | 1 Incredible | 1 Incredible | 1 Incredible | 2 Incredible | 2""" # 读取为DataFrame,自动处理分隔符和空格 df = pd.read_csv(pd.compat.StringIO(data), sep='|', skipinitialspace=True) # 2. 确保Quantity_y是数值类型(读取自动识别失败时手动转换) df['Quantity_y'] = pd.to_numeric(df['Quantity_y'], errors='coerce') # 3. 分组求和,as_index=False保留Plan为普通列 result_df = df.groupby('Plan', as_index=False)['Quantity_y'].sum() # 输出格式化结果 print(result_df.to_string(index=False))
关键说明
- 别用
iterrows():手动遍历行低效且没必要,Pandas分组聚合是C级优化,速度快得多 groupby('Plan')指定分组键,['Quantity_y'].sum()只对目标列求和,避免冗余计算as_index=False确保输出格式和你期望的一致,Plan不会变成索引列
内容的提问来源于stack exchange,提问作者robster
相关产品推荐
相关产品推荐

