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

如何在Pandas分组聚合中执行多函数运算?类型错误排查

嘿,我来帮你搞定这个聚合报错的问题!你遇到的TYPE ERROR: cannot perform reduce with flexible type主要是因为多列聚合的写法不对,还有np.mean的调用方式出错了。咱们一步步来修正:

先说说你原代码的问题

  1. 多列聚合的逻辑错误:你现在的写法是把wind_direction和wind_speed两列一起传给了两个聚合函数,但实际上你需要给每一列指定单独的操作——风速求平均,风向用yamatrino处理,不能混在一起传。
  2. np.mean的调用错误:np.mean('wind_speed')是错的,np.mean不需要传列名字符串,它会直接接收分组后的Series数据进行计算,你传字符串会导致它无法处理,触发类型错误。

正确的代码实现

首先,你的时间列转换是没问题的:

import pandas as pd
import numpy as np

# 假设你已经定义了自定义函数yamatrino(这里给个示例逻辑,你替换成自己的即可)
def yamatrino(wind_dir_series):
    # 示例:对风向做角度归一化后计算均值
    normalized_dir = wind_dir_series % 360
    return normalized_dir.mean()

# 时间列转换(这部分你写的是对的)
df['time'] = pd.to_datetime(df['time'], format='%Y-%m-%d %H:%M:%S UTC')

接下来用Pandas推荐的关键字参数式聚合(0.25+版本支持,写法最清晰):

# 按小时分组,分别指定列的聚合操作
hourly_result = df.groupby(df['time'].dt.hour).agg(
    hourly_velocity_mean=('wind_speed', np.mean),  # 风速列求平均,结果列名hourly_velocity_mean
    yamatrino_value=('wind_direction', yamatrino)  # 风向列应用yamatrino函数,结果列名yamatrino_value
)

如果你用的是旧版Pandas,也可以用字典格式来指定:

agg_config = {
    'wind_speed': [('hourly_velocity_mean', np.mean)],
    'wind_direction': [('yamatrino_value', yamatrino)]
}
hourly_result = df.groupby(df['time'].dt.hour).agg(agg_config)
# 如果不想保留多层列索引,可以去掉上层
hourly_result = hourly_result.droplevel(0, axis=1)

结果说明

运行后hourly_result会按小时(0-23)作为索引,每行包含两个字段:

  • hourly_velocity_mean:该小时所有站点的平均风速
  • yamatrino_value:该小时所有站点的风向经过yamatrino处理后的结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 20:37:40