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

如何在Pandas的groupby中执行算术运算并赋值到已有DataFrame

问题解决:按ID分组计算新列con

原代码的问题

  1. 列名引用错误:x[var]、x[ave]需改为x['var']、x['ave'],否则会被识别为未定义变量引发报错。
  2. 方法使用不当:df["id"].map()是对单个元素做映射,无法匹配分组后的结果结构,且会直接覆盖原DataFrame,而非新增目标列。
  3. 语法不完整:代码末尾缺少闭合括号,属于基础语法错误。

正确实现方法

推荐用groupby.transform计算分组内的ave总和,能直接在原DataFrame上完成向量化运算,效率更高:

import pandas as pd

data = {'id':[1,1,2,2,2,3,3,3],
        'var':[10,12,8,11,13,14,15,16],
        'ave':[2,2,1,4,3,5,6,8]}
df = pd.DataFrame(data)

# 计算每个id分组的ave总和,返回与原df同长度的Series
ave_sum_per_id = df.groupby('id')['ave'].transform('sum')
# 计算con列
df['con'] = df['var'] * (df['ave'] / ave_sum_per_id)
# 保留两位小数对齐预期输出
df['con'] = df['con'].round(2)

print(df)

输出结果

id  var  ave   con
0   1   10    2  5.00
1   1   12    2  6.00
2   2    8    1  1.00
3   2   11    4  5.50
4   2   13    3  4.88
5   3   14    5  3.68
6   3   15    6  4.74
7   3   16    8  6.74

如果需要用groupby.apply实现(适合更复杂的分组逻辑),可以这样写:

def calculate_con(group):
    ave_sum = group['ave'].sum()
    group['con'] = group['var'] * (group['ave'] / ave_sum)
    return group

df = df.groupby('id').apply(calculate_con).reset_index(drop=True)
df['con'] = df['con'].round(2)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 19:05:43