使用 pandas 数据框组 agg 函数

Posted

技术标签:

【中文标题】使用 pandas 数据框组 agg 函数【英文标题】:using pandas dataframe group agg function 【发布时间】:2017-04-06 05:39:15 【问题描述】:

有一个数据框,比如说

df

     Country    Continent        PopulationEst

0    Germany    Europe           8.036970e+07

1    Canada     North America    35.239865+07
...

我想创建一个显示大小(每个大陆的国家数量)以及每个国家/地区估计人口的总和、平均值和标准偏差的日期框。

我做了以下事情:

df2 = df.groupby('Continent').agg(['size', 'sum','mean','std'])

但结果 df2 有多个级别的列,如下所示:

df2.columns

MultiIndex(levels=[['PopulationEst'], ['size', 'sum', 'mean', 'std']],
           labels=[[0, 0, 0, 0], [0, 1, 2, 3]])

如何从列中删除 PopulationEst,所以只有 ['size', 'sum', 'mean', 'std'] 列用于数据框?

【问题讨论】:

【参考方案1】:

我认为您需要添加 ['PopulationEst'] - agg 使用此列进行聚合:

df2 = df.groupby('Continent')['PopulationEst'].agg(['size', 'sum','mean','std'])

示例:

df = pd.DataFrame(
'Country': ['Germany', 'Germany', 'Canada', 'Canada'], 
'PopulationEst': [8, 4, 35, 50], 
 'Continent': ['Europe', 'Europe', 'North America', 'North America'],
columns=['Country','PopulationEst','Continent'])
print (df)
   Country  PopulationEst      Continent
0  Germany              8         Europe
1  Germany              4         Europe
2   Canada             35  North America
3   Canada             50  North America

df2 = df.groupby('Continent')['PopulationEst'].agg(['size', 'sum','mean','std'])
print (df2)
               size  sum  mean        std
Continent                                
Europe            2   12   6.0   2.828427
North America     2   85  42.5  10.606602

df2 = df.groupby('Continent').agg(['size', 'sum','mean','std'])
print (df2)
              PopulationEst                     
                       size sum  mean        std
Continent                                       
Europe                    2  12   6.0   2.828427
North America             2  85  42.5  10.606602

另一个解决方案是MultiIndex.droplevel:

df2 = df.groupby('Continent').agg(['size', 'sum','mean','std'])
df2.columns = df2.columns.droplevel(0)
print (df2)
               size  sum  mean        std
Continent                                
Europe            2   12   6.0   2.828427
North America     2   85  42.5  10.606602

【讨论】:

如果我或其他答案有帮助,请不要忘记accept。谢谢。 谢谢!结果正是我想要的。【参考方案2】:

我认为这可以满足您的需求:

grouping = 'Continent': ['size'], 'PopEst':['sum', 'mean', 'std']
df.groupby('Continent').agg(grouping)

【讨论】:

以上是关于使用 pandas 数据框组 agg 函数的主要内容,如果未能解决你的问题,请参考以下文章

无法在 pandas 中使用 .agg 方法调用函数?

pandas 笔记:聚合函数agg

pandas使用groupby函数基于指定分组变量对dataframe数据进行分组使用agg函数计算每个分组不同数值变量的聚合统计值agg参数为字典指定不同变量的聚合计算统计量的形式

pandas agg函数使用方法

将百分位数传递给 pandas agg 函数

pandas使用groupby函数agg函数获取每个分组聚合对应的均值(mean)实战:计算分组聚合单数据列的均值计算分组聚合多数据列的均值