gpt4 book ai didi

pandas - 有没有办法获得 dask 中每组最大的项目?

转载 作者:行者123 更新时间:2023-12-03 04:26:52 26 4
gpt4 key购买 nike

我有以下数据集:

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: 传递的项目数量错误为 0,放置意味着 8

最佳答案

apply 应该可以工作,但是你的语法有点不对劲:

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

在 pandas 中,您可以使用 .nlargest.rank 作为 groupby 方法,这样您就可以在不应用 apply 的情况下执行此操作:

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

The dask documentation notes :

Dask.dataframe covers a small but well-used portion of the pandas API.
This limitation is for two reasons:

  1. The pandas API is huge
  2. Some operations are genuinely hard to do in parallel (for example sort).

关于pandas - 有没有办法获得 dask 中每组最大的项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47227874/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com