【问题标题】:using pandas dataframe group agg function使用 pandas 数据框组 agg 函数
【发布时间】: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'] 列用于数据框?

【问题讨论】:

    标签: pandas dataframe group-by aggregate multi-index


    【解决方案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)
    

    【讨论】:

      猜你喜欢
      • 2017-12-15
      • 2019-08-02
      • 2020-05-11
      • 1970-01-01
      • 2020-05-17
      • 2015-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多