如何在聚合的 pandas 数据帧上运行多个函数

Posted

技术标签:

【中文标题】如何在聚合的 pandas 数据帧上运行多个函数【英文标题】:How do I run multiple functions on my aggregated pandas dataframe 【发布时间】:2020-12-08 21:00:05 【问题描述】:

我有以下盐湖城一个月的风速和风向数据。我想按小时数据进行分组。对于在那一小时内采集的数据,我想要完成两件事:(1) 计算平均风速 (2) 将我定义的函数 (“yamatrino”) 应用于每小时内采集的所有 wind_direction 测量值。

        time                     Station_ID  wind_speed  wind_direction
    0   2019-08-01 00:00:00 UTC  WBB         3.48        96.1
    1   2019-08-01 00:00:00 UTC  UT215       6.54        141.4
    2   2019-08-01 00:00:00 UTC  MTMET       3.39        67.75
    3   2019-08-01 00:00:00 UTC  NAA         5.99        154.9
    4   2019-08-01 00:00:00 UTC  QHW         1.52        107

以下是我编写的代码:(1) 将时间数据转换为日期时间格式,(2) 创建两列,其中包含每小时数据的平均风速和 yamatrino 值。

df['time'] = pd.to_datetime(df['time'], format ='%Y-%m-%d %H:%M:%S UTC')

df.groupby(df['time'].dt.hour)['wind_direction', 'wind_speed'].agg([('yamatrino_value', lambda wind_direction: yamatrino(wind_direction)), ('hourly_velocity_mean', np.mean('wind_speed'))])

错误为“TYPE ERROR: cannot perform reduce with flexible type” 我很困惑如何聚合多列数据。

【问题讨论】:

你能先检查一下数据类型吗,好像你的错误指向this problem 什么是hourly_velocity_mean?数据中的方法或列? @Parfait 这是我想要创建的列的名称。它是时间平均风速(每小时平均一次) 【参考方案1】:

考虑在DataFrame.groupby.agg 调用中使用字典在单独的列上运行单独的聚合函数。如果您的方法需要一个参数,则不需要lambda

df.groupby(df['time'].dt.hour).agg('wind_direction': yamatrino, 
                                    'wind_speed': np.mean)

从 v0.25.0+ 开始,您可以 name aggregate columns 使用 yamatrino_valuehourly_velocity_mean 。但是,您需要使用带字段的命名元组:['column', 'aggfunc']

df.groupby(df['time'].dt.hour).agg(yamatrino_value = ('wind_direction', yamatrino), 
                                   hourly_velocity_mean = ('wind_speed', np.mean))

【讨论】:

以上是关于如何在聚合的 pandas 数据帧上运行多个函数的主要内容,如果未能解决你的问题,请参考以下文章

嵌套 for 循环的 Pandas 在创建的不同数据帧上插入多个数据

Pandas OHLC 对 OHLC 数据的聚合

Pandas:np.where 在数据帧上有多个条件

在 pandas 数据帧上同时操作 groupby 和 resample?

为啥 numpy 函数在 pandas 系列/数据帧上这么慢?

在 pandas 数据帧上并行调用函数