如何用Pandas按动物分组,同时对销量与销售额列求和?
按动物分组同时对多列求和的解决方案
原始数据
| 动物 | 销量 | 总销售额 |
|---|---|---|
| 熊猫 | 3 | 15 |
| 狐狸 | 1 | 5 |
| 熊 | 2 | 10 |
| 熊猫 | 1 | 5 |
| 狐狸 | 1 | 5 |
预期输出
| 动物 | Quantity_Sold | Total_Sales |
|---|---|---|
| 熊猫 | 4 | 20 |
| 熊 | 2 | 10 |
| 狐狸 | 2 | 10 |
解决方案
你可以通过以下几种方式实现同时对多列求和并分组:
方法1:直接指定多列后求和
如果你的DataFrame列名已经是Animal、Quantity_Sold、Total_Sales,可以直接执行:
# 分组后对指定的两列求和,reset_index将分组索引转为普通列 result = df.groupby('Animal')[['Quantity_Sold', 'Total_Sales']].sum().reset_index()
如果原始列名是中文(动物、销量、总销售额),可以先处理列名再聚合:
# 重命名中文列到英文 df.columns = ['Animal', 'Quantity_Sold', 'Total_Sales'] # 执行分组求和 result = df.groupby('Animal')[['Quantity_Sold', 'Total_Sales']].sum().reset_index()
方法2:使用agg方法(更灵活,支持自定义列名和不同聚合逻辑)
这种方式可以明确指定每一列的聚合操作,适合后续扩展不同的聚合需求:
result = df.groupby('Animal').agg( Quantity_Sold=('Quantity_Sold', 'sum'), Total_Sales=('Total_Sales', 'sum') ).reset_index()
执行上述代码后,result就是你需要的分组求和结果,格式与预期输出完全一致。
内容的提问来源于stack exchange,提问作者Martha Cleary
相关产品推荐
相关产品推荐

