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

如何在pandas groupby分组后应用函数获取关联列唯一值并计算聚合结果

问题原因

你之前的写法分别对column_b和column_c取唯一值,没有绑定两列的对应关系,无法保证两个序列的元素一一匹配,当同一个column_b值对应多个column_c、或者两列唯一值数量不一致时都会出现计算错误。

解决代码

写法1:分组内去重计算

import pandas as pd
import numpy as np

g = df.groupby("column_a")

def calc_weighted_avg(group):
    # 先获取当前分组内column_b和column_c的唯一配对,避免重复计算
    unique_pairs = group[["column_b", "column_c"]].drop_duplicates()
    total_weight = unique_pairs["column_b"].sum()
    weighted_sum = (unique_pairs["column_b"] * unique_pairs["column_c"]).sum()
    return weighted_sum / total_weight

result = g.apply(calc_weighted_avg)

运行后针对你的示例数据,输出结果约为4.166,符合预期计算逻辑。

写法2:提前全局去重(适合大数据量场景)

如果你的数据量较大,可以先全局去重再分组计算,减少分组内的重复计算开销:

# 提前对所有(b,c)配对按分组维度去重
df_unique = df[["column_a", "column_b", "column_c"]].drop_duplicates()
result = df_unique.groupby("column_a").apply(
    lambda x: (x["column_b"] * x["column_c"]).sum() / x["column_b"].sum()
)

内容的提问来源于stack exchange,提问作者JA-pythonista

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 22:15:02