如何从分组数据框中获取Dask中的所有唯一组? 我们说,我们有以下代码:
g = df.groupby(['Year', 'Month', 'Day'])
我必须遍历所有组并处理组内的数据。 我的想法是获得所有独特的价值组合,然后遍历集合并调用例如
g.get_group((2018,01,12)).compute()
对于他们每个人......这不会很快,但希望能够奏效......
在Spark / Scala中,我可以使用以下方法实现这样的smth:
val res = myDataFrame.groupByKey(x => groupFunctionWithX(X)).mapGroups((key,iter) => {
process group with all the child records
} )
我想知道,使用Dask / Python实现这样的smth的最佳方法是什么?
非常感谢任何帮助!
最好,迈克尔
更新
我在pandas的python中尝试了以下内容:
df = pd.read_parquet(path, engine='pyarrow')
g = df.groupby(('Year', 'Month', 'Day'))
g.apply(lambda x: print(x.Year[0], x.Month[0], x.Day[0], x.count()[0]))
这一切都很好。之后,我尝试了同样的Dask:
df2 = dd.read_parquet(path, engine='pyarrow')
g2 = df2.groupby(('Year', 'Month', 'Day'))
g2.apply(lambda x: print(x.Year[0], x.Month[0], x.Day[0], x.count()[0]))
这导致我出现以下错误:
ValueError: Metadata inference failed in `groupby.apply(lambda)`.
任何想法出了什么问题?
答案 0 :(得分:2)
一次计算一个组可能会很慢。相反,我建议使用groupby-apply
df.groupby([...]).apply(func)
与Pandas一样,用户定义的函数func
应该期望Pandas数据帧具有与该组对应的所有行,并且应该返回Pandas数据帧,Pandas系列或标量。
如果您的数据由分组列
编制索引,那么一次获取一个组可能很便宜df = df.set_index('date')
part = df.loc['2018-05-01'].compute()
鉴于你是按几列分组的,虽然我不确定它会有多好用。