Pandas: groupby

df['avg_salary'] = df.groupby('company')['salary'].transform(lambda x: x.mean())

def nomalize(x):
    return (x-x.mean())/x.std()

df['normalize_salary'] = df.groupby('company')['salary'].transform(normalize)
df['normalize_salary'] = df.groupby('company')['salary'].apply(normalize)

df.groupby('company')['salary'].transform('mean')

times = pd.date_range('2017-05-20 00:00', freq='1min', periods=10)

df = pd.DataFrame({'time': times, 'value': np.arange(10)})

df.set_index('time').resample('5min').count()

df['first_name'] = df.groupby(df['name'].str.split(' ').str[0])
# move first_name from name column and create a column of first name

df.groupby(df['name'].apply(lambda x: 'Lee' in x)).size()
# number of names with Lee 

df.groupby(pd.cut(df['salary'], [0, 30000, 50000, 70000, 10000])).size()
# number of salary with ranges

df.groupby(pd.Grouper(key='time', freq='Y')).size()

df.groupby(lambda x: 'odd' if x%2 else 'even')['salary'].mean()

df.groupby(['company', 'name'])['salary'].agg([np.mean, min])

df.groupby(['company', 'name']).agg({'salary': [np.mean, min]})

df.groupby('company').apply(lambda x: x['salary'].mean() - x['bonus'].mean())

#different
df.groupby('company')['salary'].apply(np.mean)
df.groupby('company')['salary'].transform(np.mean)

df.groupby('company', sort=False).agg({'salary':[np.sum, np.max, np.min]})

https://blog.csdn.net/weixin_45031468/article/details/118116521