【问题标题】:Dask Dataframe groupby results in a pandas series, how do I return a dask dataframe instead?Dask Dataframe groupby 产生一个 pandas 系列,我该如何返回一个 dask 数据框?
【发布时间】:2019-10-09 12:53:35
【问题描述】:

我正在尝试在 Dask 中执行 groupby 函数来创建新的 Dask 数据框。但是,当我执行 groupby 时,结果是熊猫系列。当我在 Pandas 中做同样的事情时,我确实返回了一个新的数据框。如何返回新的 dask 数据框?

代码如下:

 g1 = df1.groupby(['SFDC_Refresh_Date', 'Forecast_Category']).Total.sum().compute()

 g1.dtypes

返回:

 dtype('float64')

 type(g1)

返回

 pandas.core.series.Series

当我在 Pandas 中做类似的事情时

 g1 = df.groupby(['SFDC_Refresh_Date', 'Forecast_Category'], as_index=False).Total.sum()

 type(g1)

我明白了

 pandas.core.frame.DataFrame

如何通过 Dask groupby 返回 Dask 数据帧?

【问题讨论】:

    标签: pandas dataframe pandas-groupby dask


    【解决方案1】:

    dask 不支持 ASFAIK as_index,请参阅此issue。如果您对reset_index 感到满意,您可以对pandasdask 使用完全相同的代码。这里以mcve为例

    熊猫

    import pandas as pd
    import dask.dataframe as dd
    import numpy as np
    df =  pd.DataFrame({"a":[1,1,1,1,2,2,2],
                        "b":[1,1,2,2,3,4,4],
                        "Total":[0,1,2,3,4,5,6]})
    
    grp = df.groupby(["a","b"])["Total"].sum()\
            .reset_index()
    

    黎明

    df = dd.from_pandas(df, npartitions=2)
    grp = df.groupby(["a","b"])["Total"].sum()\
            .reset_index()
    

    【讨论】:

      【解决方案2】:

      我是这样做的:

       g1 = df1.groupby(['SFDC_Refresh_Date', 'Forecast_Category']).Total.sum().to_frame().compute()
       g2 = g1.reset_index()
       dd_g2 = dd.from_pandas(g2, npartitions=1)
      

      似乎是迂回的,但它似乎工作

      【讨论】:

      • 您实际上可以跳过to_frame 方法。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多