如何在聚合的熊猫数据框上运行多个功能

问题描述

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

        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:无法执行灵活类型的归约” 我很困惑如何将多个列的数据进行汇总。

解决方法

请考虑在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_value hourly_velocity_mean 。但是,您需要使用具有以下字段的命名元组:['column','aggfunc']

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