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

Pandas DataFrame groupby分组按公式计算生成NEW行的问询

按Category分组的批量计算实现

计算规则

针对每个Category分组内的同列年份数据,逐列执行运算:

  • 取分组内对应列的Math值、English值求和
  • 求和结果乘以同列的History值
  • 最终乘积除以100,得到该单元格的计算值

可直接运行的代码

import pandas as pd
import numpy as np

# 匹配示例结构的原始DataFrame
df = pd.DataFrame({
    "Category": ["A", "A", "A", "B", "B", "B"],
    "course": ["Math", "English", "History", "Math", "English", "History"],
    "2010": [981, 14, 22.74, np.nan, np.nan, 22.74],
    "2011": [21, 1610, 15, np.nan, 1610, np.nan],
    "2012": [9817, 11487, 12256, 9817, 11, 25]
})

def calc_group_data(group):
    # 提取分组内三类课程的年份列数据
    math_row = group[group["course"] == "Math"][["2010", "2011", "2012"]].squeeze()
    eng_row = group[group["course"] == "English"][["2010", "2011", "2012"]].squeeze()
    hist_row = group[group["course"] == "History"][["2010", "2011", "2012"]].squeeze()
    
    # 按公式计算
    calc_res = (math_row + eng_row) * hist_row / 100
    
    # 构造符合输出结构的单行数据
    return pd.Series({
        "Category": group["Category"].iloc[0],
        "course": "NEW",
        **calc_res
    })

# 分组运算并整理最终输出
result = df.groupby("Category", group_keys=False).apply(calc_group_data).reset_index(drop=True)

结果说明

  • 最终输出的DataFrame结构完全匹配预期:共2行,列依次为Category、course、2010、2011、2012,course列固定值为NEW
  • 缺失值处理遵循pandas默认规则:参与运算的任意值为NaN时,对应计算结果自动为NaN,无需额外手动填充
  • 可根据业务需求对浮点类型的计算结果做小数位格式化,不改动核心运算逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.24 15:15:04