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

DataFrame按两列分组计算另外两列均值时遇元组报错求解决

解决Pandas多列分组并计算多列均值的问题

先看你的原始DataFrame数据:

import pandas as pd

# 你的DataFrame示例
df_Done_Avg_Salesperson_Volume = pd.DataFrame({
    'state': ['Done', 'Done', 'Done', 'Done', 'Done'],
    'currency_str': ['USD', 'USD', 'USD', 'GBP', 'GBP'],
    'sales_person_name2': ['AY', 'AY', 'AY', 'YJJ', 'YJJ'],
    'rfq_qty': [200000.0, 1000000.0, 200000.0, 25000000.0, 2500000.0],
    'rfq_qty_CAD_Equiv': [155720.0, 778600.0, 155720.0, 14140000.0, 1946500.0]
})

你想要按sales_person_name2和currency_str分组,计算rfq_qty和rfq_qty_CAD_Equiv的均值,期望得到这样的结果:

sales_person_name2 currency_str  Avg rfq_qty  Avg rfq_qty_CAD_Equiv
AY                 USD           466666.6667        363346.6667
YJJ                GBP          13750000.0000       8043250.0000

你之前的代码出错是因为字典语法完全错误,你写的d = { ('rfq_qty',np.mean) ('rfq_qty_CAD_Equiv',np.mean) }不符合Python字典的键值对格式,这才触发了tuple object is not callable的报错。

下面给你两种正确的实现方式:

方法一:自定义列名的灵活聚合

这种方式可以直接指定每列的聚合规则,还能自定义结果列的名称:

import numpy as np

# 定义聚合规则:键为原列名,值为(新列名, 聚合函数)
agg_rules = {
    'rfq_qty': ('Avg rfq_qty', np.mean),
    'rfq_qty_CAD_Equiv': ('Avg rfq_qty_CAD_Equiv', np.mean)
}

# 执行分组聚合并重置索引
result = df_Done_Avg_Salesperson_Volume.groupby(
    ['sales_person_name2', 'currency_str']
).agg(agg_rules).reset_index()

display(result)

方法二:简洁的批量均值计算

如果所有目标列都用同一种聚合函数(这里是均值),可以用更简洁的写法,之后再统一重命名列:

# 分组计算均值
result = df_Done_Avg_Salesperson_Volume.groupby(
    ['sales_person_name2', 'currency_str']
)[['rfq_qty', 'rfq_qty_CAD_Equiv']].mean().reset_index()

# 重命名列以匹配期望格式
result.columns = [
    'sales_person_name2', 
    'currency_str', 
    'Avg rfq_qty', 
    'Avg rfq_qty_CAD_Equiv'
]

display(result)

这两种方法都能得到你想要的结果,第一种适合需要给不同列指定不同聚合函数或自定义列名的场景,第二种适合批量处理同类型聚合的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:38:38