如何按日期分组计算DataFrame加权平均值并存入新数据集
实现方案
按日维度计算Population加权的QTY平均值,核心计算逻辑为:单日加权平均QTY = 当日所有QTY * Population的乘积和 / 当日Population总和。
推荐使用向量化分组聚合实现,性能远高于逐组遍历的写法,代码如下:
# 计算每日加权平均QTY df_avg = ( # 先构造单条数据的加权项 df.assign(qty_weighted = df["QTY"] * df["Population"]) # 按日期分组聚合 .groupby("Date", as_index=False) .agg( total_weighted = ("qty_weighted", "sum"), total_pop = ("Population", "sum") ) # 计算最终加权值,并重命名为要求的字段名 .assign(**{"WEIGHTED QTY": lambda x: x["total_weighted"] / x["total_pop"]}) # 只保留需要的两个字段 [["Date", "WEIGHTED QTY"]] )
结果校验
用给出的样本数据计算,得到的结果为:
| Date | WEIGHTED QTY |
|---|---|
| 2021-01-01 | ≈8854.09 |
| 2021-01-02 | ≈8841.77 |
注意事项
- 如果数据集存在
Population为0的记录,建议在分组前增加过滤逻辑.query("Population > 0"),避免触发除零错误 - 该写法为纯向量化运算,在百万级以上数据量场景下的计算速度明显优于
groupby.apply自定义函数的实现方式
内容的提问来源于stack exchange,提问作者RafaelP
相关产品推荐
相关产品推荐

