有什么方法可以在dask中获得每组最大的项目吗?[英] Is there a way to get the nlargest items per group in dask?

本文是小编为大家收集整理的关于有什么方法可以在dask中获得每组最大的项目吗?的处理方法,想解了有什么方法可以在dask中获得每组最大的项目吗?的问题怎么解决?有什么方法可以在dask中获得每组最大的项目吗?问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我有以下数据集:

location  category    percent
A         5           100.0
B         3           100.0
C         2            50.0
          4            13.0
D         2            75.0
          3            59.0
          4            13.0
          5             4.0

,我正在尝试将数据框架按位置分组的数据框架中的类别数量.即,如果我想要每组最大的2个最大百分比,则输出应为:

location  category    percent
A         5           100.0
B         3           100.0
C         2            50.0
          4            13.0
D         2            75.0
          3            59.0

看起来像Pandas,使用pandas.core.groupby.SeriesGroupBy.nlargest相对直接,但DASK对于GroupBy没有nlargest函数.一直在玩apply,但似乎无法使其正常工作.

df.groupby(['location'].apply(lambda x: x['percent'].nlargest(2)).compute()

,但我只有错误ValueError: Wrong number of items passed 0, placement implies 8

推荐答案

申请应起作用,但是您的语法有点关闭:

In [11]: df
Out[11]:
Dask DataFrame Structure:
              Unnamed: 0 location category  percent
npartitions=1
                   int64   object    int64  float64
                     ...      ...      ...      ...
Dask Name: from-delayed, 3 tasks

In [12]: df.groupby("location")["percent"].apply(lambda x: x.nlargest(2), meta=('x', 'f8')).compute()
Out[12]:
location
A         0    100.0
B         1    100.0
C         2     50.0
          3     13.0
D         4     75.0
          5     59.0
Name: x, dtype: float64

熊猫中,您将拥有.nlargest和.rank作为groupby方法,可以使您在不适用的情况下执行此操作:

In [21]: df1
Out[21]:
  location  category  percent
0        A         5    100.0
1        B         3    100.0
2        C         2     50.0
3        C         4     13.0
4        D         2     75.0
5        D         3     59.0
6        D         4     13.0
7        D         5      4.0

In [22]: df1.groupby("location")["percent"].nlargest(2)
Out[22]:
location
A         0    100.0
B         1    100.0
C         2     50.0
          3     13.0
D         4     75.0
          5     59.0
Name: percent, dtype: float64

dask文档注释:

dask.dataframe覆盖了熊猫API的一小部分但良好的部分.
此限制有两个原因:

  1. 大熊猫API巨大
  2. 某些操作确实很难并行执行(例如,分类).

本文地址:https://www.itbaoku.cn/post/1727916.html