如何从分组数据框中获取 Dask 中的所有唯一组? 比方说,我们有以下代码:
g = df.groupby(['Year', 'Month', 'Day'])
我必须遍历所有组并处理组内的数据。 我的想法是获取所有唯一值组合,然后遍历集合并调用例如
g.get_group((2018,01,12)).compute()
对于他们每个人......这不会很快,但希望会工作..
在 Spark/Scala 中,我可以使用以下方法实现这样的目的:
val res = myDataFrame.groupByKey(x => groupFunctionWithX(X)).mapGroups((key,iter) => {
process group with all the child records
} )
我想知道,使用 Dask/Python 实现这样的 smth 的最佳方法是什么?
如有任何帮助,我们将不胜感激!
最好的,迈克尔
更新
我在 python 中用 pandas 尝试了以下内容:
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)`.
知道哪里出了问题吗?
最佳答案
一次计算一组可能会很慢。相反,我建议使用 groupby-apply
df.groupby([...]).apply(func)
与 Pandas 一样,用户定义的函数 func
应该期望 Pandas 数据框包含与该组对应的所有行,并且应该返回 Pandas 数据框、Pandas 系列或标量。
如果您的数据是按分组列索引的,则一次获取一个分组可能会很便宜
df = df.set_index('date')
part = df.loc['2018-05-01'].compute()
鉴于您按几列分组,但我不确定这是否有效。
关于python - 如果我有多个字段分组,如何从 Dask DataFrameGroupBy 获取所有分组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48870342/