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

如何使用pandas的groupby功能计算含rho矩阵的嵌套双重求和?

实现方案

你要计算的求和式本质是向量x关于矩阵rho的二次型x @ rho @ x,结合groupby和numpy的矩阵运算可以实现非常简洁的写法,完全不需要嵌套循环:

import pandas as pd
import numpy as np

# 示例数据
dftest=pd.DataFrame({
    "tau":[1,2,5,1,2,5],
    "x"  :[4,5,6,7,8,9],
    "cat":list("aaabbb")
})

rho = pd.DataFrame({
    1:[1, 0.9, 0.8],
    2:[0.9, 1, 0.7],
    5:[0.8, 0.7, 1]
}).T
rho = rho.rename(columns={0:1, 1:2, 2:5})

# 核心计算逻辑
def calc_quadratic(group):
    # 按tau排序保证和rho的行列顺序对齐
    sorted_group = group.sort_values("tau")
    x = sorted_group["x"].values
    # 提取当前分组tau对应的rho子矩阵,适配tau不全的场景
    tau_seq = sorted_group["tau"].tolist()
    rho_sub = rho.loc[tau_seq, tau_seq].values
    # 矩阵运算直接得到求和结果
    return x @ rho_sub @ x.T

# 分组计算
result = dftest.groupby("cat").apply(calc_quadratic).reset_index(name="rho_sum")

运行后得到的结果如下:

catrho_sum
a193.4
b496.4

如果你的所有分组内的tau取值、顺序都和rho完全一致,可以省去提取子矩阵的步骤进一步提升性能:

def calc_quadratic_fast(group):
    x = group.sort_values("tau")["x"].values
    return x @ rho.values @ x.T

该方法的优势:

  • 采用numpy向量化运算,性能远高于Python原生嵌套循环,数据量越大优势越明显
  • 代码逻辑和数学表达式完全对应,可读性强
  • 适配性好,就算分组内tau取值不全、顺序混乱也能正确计算

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 09:36:08