首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于列名的Pandas中多个列的不同聚合

基于列名的Pandas中多个列的不同聚合
EN

Stack Overflow用户
提问于 2020-07-20 16:50:40
回答 1查看 40关注 0票数 2

我有一个很大的Pandas数据框架,我想以不同的方式聚合这些列。我有24列(一天中的小时),我想求和,对于所有其他列,取最大值。

我知道我可以手动编写所需的条件,如下所示:

代码语言:javascript
复制
df_agg = df.groupby('user_id').agg({'hour_0':'sum', 
                                    'hour_1':'sum',
                                    .
                                    .
                                     'hour_24':'sum',
                                    'all other columns': 'max'}
 )

但我想知道是否有一个优雅的解决方案:

代码语言:javascript
复制
df_agg = df.groupby('user_id').agg({'hour_*':'sum', 
                                    'all other columns != hour_*': 'max'}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-20 16:54:11

您可以使用hour按所有列生成字典,将所有其他列添加到另一个字典,合并它们,最后传递给agg

代码语言:javascript
复制
c1 = df.columns[df.columns.str.startswith('hour')].tolist()
#also excluded user_id column for avoid `max` aggregation
c2 = df.columns.difference(c1 + ['user_id'])
#https://stackoverflow.com/a/26853961
d = {**dict.fromkeys(c1, 'sum'), **dict.fromkeys(c2, 'max')}

df_agg = df.groupby('user_id').agg(d)

或者,您可以在concat中使用2倍的groupby

代码语言:javascript
复制
df_agg = pd.concat([df.groupby('user_id')[c1].sum(), 
                    df.groupby('user_id')[c2].max()], axis=1)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62991809

复制
相关文章

相似问题

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