我有以下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
操作的情况下将所有内容放在一起。
答案 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'})