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?
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