Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如果有多个group by字段,如何从Dask DataFrameGroupBy获取所有组?_Python_Dataframe_Dask - Fatal编程技术网

Python 如果有多个group by字段,如何从Dask DataFrameGroupBy获取所有组?

Python 如果有多个group by字段,如何从Dask DataFrameGroupBy获取所有组?,python,dataframe,dask,Python,Dataframe,Dask,如何从分组数据帧中获取Dask中的所有唯一组? 比方说,我们有以下代码: g = df.groupby(['Year', 'Month', 'Day']) 我必须遍历所有组并处理组内的数据。 我的想法是获得所有唯一的值组合,然后遍历集合并调用 g.get_group((2018,01,12)).compute() 对于他们每个人。。。这不会很快,但希望能奏效 在Spark/Scala中,我可以使用以下方法实现smth: val res = myDataFrame.groupByKey(x

如何从分组数据帧中获取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的最佳方法是什么

任何帮助都将不胜感激

最好的,迈克尔

更新

我在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)`.

知道哪里出了问题吗?

一次计算一组可能会很慢。相反,我建议使用GroupByApply

df.groupby([...]).apply(func)
与Pandas一样,用户定义函数
func
应该期望Pandas数据帧具有与该组对应的所有行,并且应该返回Pandas数据帧、Pandas系列或标量

如果您的数据由分组列编制索引,那么一次获取一个组的成本可能很低

df = df.set_index('date')
part = df.loc['2018-05-01'].compute()

考虑到您是通过几列进行分组的,但我不确定这会有多好。

问题是,在apply函数中我能做什么?我可以只保存分组列的值吗?或者我可以访问组中的所有底层行吗?我也尝试过使用smth,比如g.apply(lambda x:(x.Year,x.Month,x.Day)),但它并没有真正起作用。我已经用更多信息编辑了上面的答案。这就像pandas groupby-apply一样。感谢您的示例。我在熊猫和达斯克试过。它在熊猫身上工作得很好,但在达斯克根本不起作用。@MRocklin。我发现了几个与dask相关的问题和答案,并尝试在这个特定问题上实现一种方法;但我似乎不明白。你能调查一下这个吗