【问题标题】:How to use group by describe with unstack operation in python dask?如何在 python dask 中使用 group by describe 和 unstack 操作?
【发布时间】:2019-10-17 04:40:37
【问题描述】:

我正在尝试使用dask中的describe() and unstack()函数来获取数据的汇总统计。

但是,我收到如下所示的错误

import dask.dataframe as dd
df = dd.read_csv('Measurement_table.csv',assume_missing=True)
df.describe().compute() #this works but when I try to use `unstack`, i get an error

实际上,我正在尝试在 dask 的帮助下使下面的 python pandas 代码更快地工作

df.groupby(['person_id','measurement_concept_id','visit_occurrence_id'])['value_as_number']
    .describe()
    .unstack()
    .swaplevel(0,1,axis=1)
    .reindex(df['readings'].unique(), axis=1, level=0)

我尝试将compute() 添加到每个输出阶段,如下所示

df1 = df.groupby(['person_id','measurement_concept_id','visit_occurrence_id'])['value_as_number'].describe().unstack().swaplevel(0,1,axis=1).reindex(df['readings'].unique(), axis=1, level=0).compute()

我收到以下错误,但 same works well in pandas

谁能帮我解决这个问题?

【问题讨论】:

    标签: python python-3.x dask dask-distributed dask-delayed


    【解决方案1】:

    unstack 未实现,但describe 可以与apply 一起使用:

    df = (sd.groupby(['subject_id','readings'])['val']
            .apply(lambda x: x.describe())
            .reset_index()
            .rename(columns={'level_2':'func'})
            .compute()
            )
    print (df)
        subject_id readings   func        val
    0            1   READ_1  count   2.000000
    1            1   READ_1   mean   6.000000
    2            1   READ_1    std   1.414214
    3            1   READ_1    min   5.000000
    4            1   READ_1    25%   5.500000
    ..         ...      ...    ...        ...
    51           4  READ_09    min  45.000000
    52           4  READ_09    25%  45.000000
    53           4  READ_09    50%  45.000000
    54           4  READ_09    75%  45.000000
    55           4  READ_09    max  45.000000
    
    [112 rows x 4 columns]
    

    【讨论】:

    • 我们不能通过在 Dask 中融化来做到这一点吗?
    • @SSMK - 我也尝试pivot_table 喜欢df = (sd.groupby(['subject_id','readings'])['val'] .apply(lambda x: x.describe()) .reset_index() .rename(columns={'level_2':'func'}) .assign(readings = lambda x: pd.Categorical(x['readings'] + '_' + x['func'])) .pivot_table(index='subject_id', columns='readings', values='val') .compute() ) 但得到NotImplementedError: Series getitem in only supported for other series objects with matching partition structure
    • 我明白了。感谢您的时间和帮助。非常感谢
    • 我看到dask 也有点慢。我的意思是这还需要时间。我猜,我应该在源表中使用 SQL 来完成。
    猜你喜欢
    • 1970-01-01
    • 2021-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-01
    • 1970-01-01
    • 2018-09-16
    相关资源
    最近更新 更多