You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas多列分组计算数值列均值与求和方法咨询

嘿,我来帮你搞定这个问题!其实完全不用itertools那么绕,pandas的groupby本身就完美支持你的需求,咱们一步步来解决:

首先先修正下你的DataFrame创建代码——你最后选列的时候把value1给排除了,这会导致没法计算它的聚合值,先把它加回来:

import pandas as pd

df = pd.DataFrame(
    {
        'value': [34, 65, 65, 34, 53, 23, 54, 23, 65, 43, 23, 34, 54],
        'value1': [54, 45, 23, 43, 66, 12, 87, 34, 54, 23, 65, 34, 76],
        'fruit': ['Plum', 'Apple', 'Orange', 'Pear', 'Grape', 'Apple', 'Orange', 'Banana', 'Orange', 'Grape', 'Apple', 'Banana', 'Tomato'],
        'country': ['USA', 'USA', 'USA', 'UK', 'UK', 'UK', 'CANADA', 'CANADA', 'CANADA', 'USA', 'USA', 'UK', 'USA']
    }
)[['value', 'value1', 'fruit', 'country']]  # 这里保留value1列

接下来分两步实现你的需求:

1. 基于fruit和country的组合分组

直接在groupby里传入两个列名的列表就行,pandas会自动按这两个列的唯一组合来分组:

grouped = df.groupby(['fruit', 'country'])

2. 同时计算多个数值列的均值与求和

用agg()方法就能一次性指定多个聚合操作,有两种常用方式:

方式一:统一对所有数值列计算均值和求和

这种方式会生成多层列索引,结构清晰:

result = grouped.agg(['mean', 'sum'])
print(result)

输出会类似这样(截取部分):

value        value1       
                    mean sum      mean sum
fruit   country                           
Apple   USA        44.0  88      55.0  110
        UK         23.0  23      12.0   12
Banana  CANADA     23.0  23      34.0   34
        UK         34.0  34      34.0   34
...

方式二:自定义列名,生成单层索引

如果你想要更直观的列名(比如value_mean、value_sum),可以用字典式的参数来指定:

result_custom = grouped.agg(
    value_mean=('value', 'mean'),
    value_sum=('value', 'sum'),
    value1_mean=('value1', 'mean'),
    value1_sum=('value1', 'sum')
)
print(result_custom)

输出的列会更简洁:

value_mean  value_sum  value1_mean  value1_sum
fruit   country                                                 
Apple   USA             44.0         88         55.0         110
        UK              23.0         23         12.0          12
Banana  CANADA          23.0         23         34.0          34
        UK              34.0         34         34.0          34
...

查看特定组合的结果

如果想单独查看某个组合(比如USA的Grape),直接用loc索引就行:

print(result.loc[('Grape', 'USA')])

输出:

value   mean    43.0
        sum     43.0
value1  mean    23.0
        sum     23.0
Name: (Grape, USA), dtype: float64

这样就完全实现了你要的需求:每个fruit+country的组合,都能得到value和value1的均值与求和结果,比用itertools简单多啦!

内容的提问来源于stack exchange,提问作者Lostsoul

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 16:12:52