Search code examples
pythonpandasdataframesortingpandas-groupby

How to calculate mean values per group and sort the output by that mean in Pandas


I have a dataframe like this:

color    power
red      6
red      8
green    3
red      1
yellow   10
green    5

What I want is this:

color   mean_of_power
yellow  10
red     5
green   4

I have tried df.groupby("color")["power"].mean(), but this will give me a dataframe sorted alphabetically:

color   mean_of_power
green   4
red     5
yellow  10

How can I group a dataframe by one column (color), calculate the mean of another column (power) per group and sort the output by the value of that mean?


Solution

  • You can add sort_values right after that:

    df.groupby("color").power.mean().sort_values(ascending=False)
    
    

    Or to create an additional column with count which we sort by:

    (df.groupby("color").power
       .agg(["mean", "count"])
       .rename(columns="{}_of_power".format)
       .sort_values("count_of_power", ascending=False))
    
    # output: 
            mean_of_power  count_of_power
    color                                
    red               5.0               3
    green             4.0               2
    yellow           10.0               1