I have a dataframe where I need to create a grouping of ages and then have the averages amount of Tip amount
for each group.
My Data looks the following
Tip amount | Age |
---|---|
3 | 30 |
30 | 35 |
4 | 60 |
1 | 12 |
7 | 25 |
3 | 45 |
15 | 31 |
5 | 8 |
I have tried to use pd.cut()
with bins
to create the grouping, but I can't seem to get the Tip amount
average (maybe using mean()
) to be in the DataFrame as well.
import pandas as pd
bins= [0,15,30,45,60,85]
labels = ['0-14','15-29','30-44','45-59','60 ']
df['Tip amount']=df['Tip amount'].astype(int)
#df = df.groupby('Age')[['Tip amount']].mean()
df = df.groupby(pd.cut(df['Age'], bins=bins, labels=labels, right=False)).size()
This gives the following output:
Age | |
---|---|
0-14 | 2 |
15-29 | 1 |
30-44 | 3 |
45-59 | 1 |
60 | 1 |
But I would like to have the average Tip amount
for the groups as well.
Age | Tip amount | |
---|---|---|
0-14 | 2 | avg |
15-29 | 1 | avg |
30-44 | 3 | avg |
45-59 | 1 | avg |
60 | 1 | avg |
CodePudding user response:
Try:
df.groupby(pd.cut(df['Age'], bins=bins, labels=labels, right=False)).agg({'Age': ['size'], 'Tip amount': ['mean']})