代码之家  ›  专栏  ›  技术社区  ›  Karma

熊猫:多列返回平均值

  •  11
  • Karma  · 技术社区  · 7 年前

    如何输出多个列的平均值?

    Gender   Age     Salary     Yr_exp   cup_coffee_daily
      Male    28    45000.0        6.0                2.0
    Female    40    70000.0       15.0               10.0
    Female    23    40000.0        1.0                0.0
      Male    35    55000.0       12.0                6.0
    

    我有 df.groupby('Gender', as_index=False)['Age', 'Salary', 'Yr_exp'].mean() ,但它仍然只返回第一列的平均值 Age 。如何返回不同列中特定列的平均值?所需输出:

    Gender   Age     Salary   Yr_exp
      Male  31.5    50000.0      9.0
    Female  31.5    55000.0      8.0
    

    谢谢

    2 回复  |  直到 7 年前
        1
  •  18
  •   Jonathan Dayton    6 年前

    给定此数据帧:

    df = pd.DataFrame({
        "Gender": ["Male", "Female", "Female", "Male"],
        "Age": [28, 40, 23, 35],
        "Salary": [45000, 70000, 40000, 55000],
        "Yr_exp": [6, 15, 1, 12]
    })
    
    df
       Age  Gender  Salary  Yr_exp
    0   28    Male   45000       6
    1   40  Female   70000      15
    2   23  Female   40000       1
    3   35    Male   55000      12
    

    按性别分组并使用 mean() 功能:

    df.groupby("Gender").mean()
             Age   Salary  Yr_exp
    Gender                       
    Female  31.5  55000.0     8.0
    Male    31.5  50000.0     9.0
    

    编辑:之后可能需要更改索引方式 groupby() : df['Age', 'Salary'] 给出 KeyError 但是 df[['Age', 'Salary']] 返回预期的:

       Age  Salary
    0   28   45000
    1   40   70000
    2   23   40000
    3   35   55000
    

    尝试更改

    df.groupby("Gender", as_index=True)['Age', 'Salary', 'Yr_exp'].mean() 
    

    df.groupby("Gender", as_index=True)[['Age', 'Salary', 'Yr_exp']].mean()
    
        2
  •  8
  •   VnC    6 年前

    您还可以使用 pandas.agg() :

    df.groupby("Gender").agg({'Age' : 'mean', 'Salary' : 'mean', 'Yr_exp': 'mean'})
    

    将导致:

             Age    Salary  Yr_exp
    Gender          
    Female  31.5    55000   8
    Male    31.5    50000   9
    

    使用 .agg() 让您有机会对分组对象应用不同的函数,例如:

    df.groupby("Gender").agg({'Age' : 'mean', 'Salary' : ['min', 'max'], 'Yr_exp': 'sum'})
    

    输出:

              Age         Salary    Yr_exp
             mean    min      max   sum
    Gender              
    Female  31.5    40000   70000   16
    Male    31.5    45000   55000   18