数据:

z = pd.DataFrame({'a':[1,1,1,2,2,3,3],'b':[3,4,5,6,7,8,9], 'c':[10,11,12,13,14,15,16]})


我的代码:

gbz = z.groupby('a')
f1 = lambda x: x.loc[x['b'] > 4]['c'].mean()
f2 = lambda x: x.mean()
f3 = {'I don't know what should I write here':{'name1':f1}, 'b':{'name2': f2}}
list1 = gbz.agg(f3)


题:

如何在函数“ f1”中放置多个列? (此功能需要groupby对象的两列)

预期结果:

     name1  name2
1    12.0   4
2    13.5   6.5
3    15.5   8.5

最佳答案

agg函数中的嵌套字典为deprecated。您可能要做的是使用groupby.apply并为每个组返回正确索引的序列以进行重命名:

(z.groupby('a')
  .apply(lambda g: pd.Series({
    'name1': g.c[g.b > 4].mean(),
    'name2': g.b.mean()
})))

#  name1    name2
#a
#1  12.0    4.0
#2  13.5    6.5
#3  15.5    8.5

关于python - Pandas 数据框中多个列上的聚合,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46270114/

10-12 21:03