首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在GroupBy操作Dask/Pandas后获取所有列

在GroupBy操作Dask/Pandas后获取所有列
EN

Stack Overflow用户
提问于 2022-03-21 15:58:54
回答 1查看 175关注 0票数 2

我有一个像这样简单的数据:

代码语言:javascript
运行
复制
    id sim  col1    col2    year    extra
0   1   1    a       b      2021    H
1   2   2    a       b      2024    A

我想通过col1 & col2的df进行分组,并计算类似分组列中的sim。所以我这么做了我也明白了..。

代码语言:javascript
运行
复制
ddf.groupby(["col1", "col2"]).agg({"sim":"list"}).compute()

                  
col1    col2     sim
a        b       [1, 2]

我也想保持最高的一年。所以我也这么做了:

代码语言:javascript
运行
复制
ddf.groupby(["col1", "col2"]).agg({"sim":"list", "year":"max"}).compute()

得到了这个df:

代码语言:javascript
运行
复制
col1    col2    sim     year    
a         b    [1, 2]   2024

注意:看看分组之间的最大年份是2024年,所以我保留了这个。

但我失去了其他列像id和额外。我还想根据最大年值得到这些列。所以,无论哪一年是最大的,保持这一行。

但我失去了其他栏目,如id,年份和额外的。那我怎么才能得到这个。

预期结果Df:

代码语言:javascript
运行
复制
 id   col1  col2    sim     year    extra
  2    a      b    [1, 2]   2024      A
EN

回答 1

Stack Overflow用户

发布于 2022-03-21 16:16:41

year上的值进行排序,然后使用agg:dgroupby和聚合进行排序,其中sim使用list进行聚合,而其余的列则使用最后一次聚合

代码语言:javascript
运行
复制
d = {**dict.fromkeys(ddf.columns, 'last'), 'sim': 'list'}
ddf.sort_values('year').groupby(['col1', 'col2']).agg(d).reset_index(drop=True)

结果

代码语言:javascript
运行
复制
   id     sim col1 col2  year extra
0   2  [2, 1]    a    b  2024     A
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71560517

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档