Vaex函数异常输出



我有以下Vaex函数我想做:

@vaex.register_function(on_expression=True)
def getSumStatsByGroup(df, group, x):
data = (df.groupby(by=group, agg={'Min' : vaex.agg.min(df[x]), 'Mean' : vaex.agg.mean(df[x]), 'Max' : vaex.agg.max(df[x]),
'Variance' : vaex.agg.var(df[x])}))
return data

虽然每次我运行它,我得到非常混乱的数据像这样:

File <unknown>:2
0           AR              2020-12-06 00:00:00.000000000  AR              Argentina       AR                    ARG                   0                    2176.0           150.0           1489103.0               43125.0                3699476.0            nan                       nan                              nan                             nan                                    nan                               nan                                      44938712.0    19523766.0         20593330.0           3599141.0           41339571.0          16.515                0.825                    

虽然,当我手动填写参数时:

df.groupby(by='country_name', agg={'Min' : vaex.agg.min(df['new_confirmed']), 'Mean' : vaex.agg.mean(df['new_confirmed']), 'Max' : vaex.agg.max(df['new_confirmed']),
'Variance' : vaex.agg.var(df['new_confirmed'])})

输出与预期一致。我尝试过将返回值转换为pandas数据框,在其上调用print(),将其更改为on_expression=False,在函数中删除return关键字,但每次我都得到完全相同的结果。我在jupyter笔记本上运行这个,非常困惑为什么它在手动填写参数而不是Vaex函数时起作用。任何帮助或解释是非常感谢!

我想你误解了@register_function装饰器的工作原理和它的预期用途。

装饰器在数据框上按行应用函数。预期的参数是一个或多个列/表达式或常量。然后,该函数将获取一行数据,对其求值并返回结果。该函数应该返回单个值(示例、int、字符串,甚至可能是列表或numpy数组,我认为vaex支持其中一些结构)。基本上,输出应该是一个vax表达式(groupby不适合这个表达式,因为它的输出是一个数据帧)。

这很有用,因为vaex将在内核外并行运行此操作,因此您可以获得一些加速。在某些方面,它类似于apply,但其思想是,对于特定的项目,您可以构建自己的内部扩展,以完全满足您的需求。

我希望我的解释有点道理。我认为@register_functiion应该更好地记录在vaex上。无论如何,这里有一个文档的链接。

也许对于你的使用情况(如果我理解正确的话),你可能想看看自定义数据框架访问器的东西

相关内容

  • 没有找到相关文章

最新更新