Python 在带有groupby的dask数据帧上使用pd.DataFrame.sample

Python 在带有groupby的dask数据帧上使用pd.DataFrame.sample,python,dataframe,pandas-groupby,dask,Python,Dataframe,Pandas Groupby,Dask,我有一个非常大的数据帧,我正在多次重新采样,所以我想使用dask来加速这个过程。然而,我在groupby应用程序中遇到了挑战。一个示例数据帧是 将numpy作为np导入 作为pd进口熊猫 随机输入 test_df=pd.DataFrame{'sample_id':np.array['a','b','c','d']。repeat100, “param1”:random.samplerange1,1000400} 测试测向。设置索引“样本id”,就地=真 我通常可以使用分组和重采样 N=5;i=1

我有一个非常大的数据帧,我正在多次重新采样,所以我想使用dask来加速这个过程。然而,我在groupby应用程序中遇到了挑战。一个示例数据帧是

将numpy作为np导入 作为pd进口熊猫 随机输入 test_df=pd.DataFrame{'sample_id':np.array['a','b','c','d']。repeat100, “param1”:random.samplerange1,1000400} 测试测向。设置索引“样本id”,就地=真 我通常可以使用分组和重采样

N=5;i=1 test=test_df\ .groupby['sample_id']\ .applypd.DataFrame.sample,n=n,replace=False\ .reset_indexdrop=True 测试['bootstrap']=i 测试[‘重采样’]=N 我把它包装成一个方法,在N个梯度上迭代I次。实际的数据帧非常大,有许多列,在任何人建议之前,这种方法比索引上的np.random.choice方法要快一点——它都在groupby中。我已经通过一种多处理方法运行了整个过程,但我想看看是否可以从相同的dask版本中获得更快的速度。问题是,文档建议,如果索引和分区,那么每个分区都会有完整的组,但事实证明并非如此

将dask.dataframe作为dd导入 df1=dd.from_pandastest_df,npartitions=8 df1=df1.0 df1.1分部 创造

“a”、“b”、“c”、“d”、“d”

这不足为奇地导致了失败

N=5;i=1 测试=df1\ .groupby['sample_id']\ .applypd.DataFrame.sample,n=n,replace=False\ .reset_indexdrop=True 测试['bootstrap']=i 测试[‘重采样’]=N ValueError:groupby.applysample中的元数据推断失败。 您提供了自定义函数,Dask无法 确定该函数返回的输出类型。 要解决此问题,请提供meta=关键字。 运行的Dask函数的docstring应该包含更多信息。 原始错误如下: 当“replace=False”时,ValueError无法获取比总体更大的样本


我已经翻遍了有关关键字、dask数据帧和分区以及groupby聚合的所有文档,如果文档中有解决方案,我就完全找不到了。对于如何创建一组更智能的分区和/或让groupby with sample更好地使用dask的任何建议,我都将不胜感激。

我不太清楚您想要实现什么,以及为什么需要添加默认的replace=False,但下面的代码对我有用。我只需要添加元

将dask.dataframe作为dd导入 df1=dd.from_pandastest_df.reset_索引,npartitions=8 N=5 i=1 测试=df1\ .groupby['sample_id']\ .applylambda x:x.samplen=N, meta={sample_id:object, 参数1:f8}\ .reset_indexdrop=True 测试['bootstrap']=i 测试[‘重采样’]=N 如果您想删除示例id,只需添加

df=df.dropsample\u id,轴=1
我不太清楚您想要实现什么,以及为什么需要添加replace=False,这是默认值,但是下面的代码对我来说很有用。我只需要添加元

将dask.dataframe作为dd导入 df1=dd.from_pandastest_df.reset_索引,npartitions=8 N=5 i=1 测试=df1\ .groupby['sample_id']\ .applylambda x:x.samplen=N, meta={sample_id:object, 参数1:f8}\ .reset_indexdrop=True 测试['bootstrap']=i 测试[‘重采样’]=N 如果您想删除示例id,只需添加

df=df.dropsample\u id,轴=1
嗨,丹妮尔,我的答案对你有帮助吗?嗨,丹妮尔,我的答案对你有帮助吗?谢谢!如果你知道的话,你能告诉我在文档中它在哪里描述这个吗?我发誓我花了一天的时间在文档中,不理解这一点。对于我要实现的,我正在一组一组地迭代地对高维数据帧进行下采样,并在内部特征不再为真时测试N。replace=False是由于下采样选项的复杂性而遗留下来的,很抱歉在发布示例之前没有将其删除。嗨,Danielle,您需要文档的链接吗?在apply中发生的是纯pandas,我是说x.sample,而对于meta来说是典型的dask。您需要提前知道给定计算的输出,并说明数据类型。谢谢!如果你知道的话,你能告诉我在文档中它在哪里描述这个吗?我发誓我花了一天的时间在文档中,不理解这一点。对于我要实现的,我正在一组一组地迭代地对高维数据帧进行下采样,并在内部特征不再为真时测试N。replace=False是由于下采样选项的复杂性而遗留下来的,很抱歉在发布示例之前没有将其删除。嗨,Danielle,您需要文档的链接吗?在apply中发生的是纯pandas,我是说x.sample,而对于meta来说是典型的dask。你需要 提前知道给定计算的输出是什么,并说明数据类型。