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

Pandas基于time_gap分组并按count加权计算average_speed的方法

正确实现分组聚合的方法

你之前的代码失败的核心原因是agg方法的参数格式错误:你用了集合({("count", sum), ("average_speed", average_speed_mean)}),但pandas要求agg接收的是字典(键为列名,值为对应聚合函数)或者关键字参数形式的聚合规则。

以下是两种可行的正确实现方式:

方式一:关键字参数命名聚合结果列(推荐)

这种方式可以直接指定聚合后的列名,可读性更强:

import numpy as np

def average_speed_mean(x):
    try: 
        return np.average(x["average_speed"], weights=x["count"])
    except ZeroDivisionError:
        return 0

# 按time_gap分组,计算count总和与加权平均速度
result_df = df_merged.groupby("time_gap").agg(
    total_count=("count", "sum"),
    weighted_avg_speed=("average_speed", average_speed_mean)
)

方式二:字典形式指定聚合规则

如果希望保留原列名作为聚合后的列名,可以用字典传递参数:

import numpy as np

def average_speed_mean(x):
    try: 
        return np.average(x["average_speed"], weights=x["count"])
    except ZeroDivisionError:
        return 0

result_df = df_merged.groupby("time_gap").agg({
    "count": "sum",
    "average_speed": average_speed_mean
})

额外说明

由于time_gap是category类型,默认分组会保留所有类别(包括没有对应数据的类别)。如果只想保留有数据的类别,可以在groupby中添加observed=True参数:

result_df = df_merged.groupby("time_gap", observed=True).agg(
    total_count=("count", "sum"),
    weighted_avg_speed=("average_speed", average_speed_mean)
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 01:32:10