首页 > 解决方案 > 具有多列的数据框的不同聚合

问题描述

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

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

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

标签: pythonpandasgroup-bypandas-groupbyaggregate-functions

解决方案


我会按照以下方式进行

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


推荐阅读