具有多列的数据框的不同聚合

Posted

技术标签:

【中文标题】具有多列的数据框的不同聚合【英文标题】:Different aggregation for dataframe with several columns 【发布时间】:2021-11-21 07:04:14 【问题描述】:

我正在寻找一些捷径来减少所需的手动分组:

我有一个包含许多列的数据框。当按“级别”对数据框进行分组时,我想使用 nunique() 对两列进行分组,但所有其他列(大约 60 列代表从 2021 年开始的年份)使用 mean()。

有人知道如何定义“其余”列吗? 谢谢!

【问题讨论】:

【参考方案1】:

我会这样做

import pandas as pd
df = pd.DataFrame('X':[1,1,1,2,2,2],'A':[1,2,3,4,5,6],'B':[1,2,3,4,5,6],'C':[7,8,9,10,11,12],'D':[13,14,15,16,17,18],'E':[19,20,21,22,23,24])
aggdct = dict.fromkeys(df.columns, pd.Series.mean)
del aggdct['X']
aggdct['A'] = pd.Series.nunique
print(df.groupby('X').agg(aggdct))

输出

   A  B   C   D   E
X
1  3  2   8  14  20
2  3  5  11  17  23

说明:我准备了dict 以及如何使用 dict.fromkeys 进行聚合的信息,它确实提供了 dict,其中键是列名,值是 pd.Series.mean 函数,然后删除要在 groupby 中使用的列并将选定列更改为持有pd.Series.nunique 而不是pd.Series.mean

【讨论】:

这正是我想要的。非常感谢!

以上是关于具有多列的数据框的不同聚合的主要内容,如果未能解决你的问题,请参考以下文章

基于多列信息的数据框的条件转换、聚合/分组

在 Python/Pandas 中执行不同操作的多列有条件地聚合分组数据

将唯一值(在多列中)传播到不同的列并粘贴聚合值

一次在多列上使用 pandas groupby().apply(list) [重复]

具有多列聚合的 SQL Server 数据透视表

循环的单向方差分析:如何通过数据框的多列启动