如何在聚合的 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_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))
【讨论】:
以上是关于如何在聚合的 pandas 数据帧上运行多个函数的主要内容,如果未能解决你的问题,请参考以下文章
嵌套 for 循环的 Pandas 在创建的不同数据帧上插入多个数据
在 pandas 数据帧上同时操作 groupby 和 resample?