如何计算每组的平均和最频繁值?

时间:2019-01-16 21:36:04

标签: python pandas

我有以下df

df =
   year  intensity  category
   2015  22         1
   2015  21         1
   2015  23         2
   2016  25         2
   2017  20         1
   2017  21         1
   2017  20         3

我需要按year分组,并计算平均intensity和最频繁的category(每年)。

我知道可以如下计算最频繁的类别:

df.groupby('year')['category'].agg(lambda x: x.value_counts().index[0])

我也知道如何计算平均值intensity

df = df.groupby(["year"]).agg({'intensity':'mean'}).reset_index()

但是我不知道如何在没有join操作的情况下将所有内容放在一起。

1 个答案:

答案 0 :(得分:2)

agg与字典一起使用以定义如何汇总每一列。

df.groupby('year', as_index=False)[['category', 'intensity']]\
  .agg({'category': lambda x: pd.Series.mode(x)[0], 'intensity':'mean'})

输出:

   year  category  intensity
0  2015         1  22.000000
1  2016         2  25.000000
2  2017         1  20.333333

或者您仍然可以使用lambda函数

df.groupby('year', as_index=False)[['category','intensity']]\
  .agg({'category': lambda x: x.value_counts().index[0],'intensity':'mean'})