pandas 数据框中多列的聚合
Aggregation on multiple columns in a pandas dataframe
数据:
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
和 return 为每个组使用正确索引的系列以进行重命名:
(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
您可以像这样将 agg
与 lambda
一起使用:
g = z.groupby('a').agg(lambda x: [x[(x.b > 4)].c.mean(), x.b.mean()])
您必须手动重命名列:
g.columns = ['name1', 'name2']
print(g)
name1 name2
a
1 12.0 4.0
2 13.5 6.5
3 15.5 8.5
数据:
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
和 return 为每个组使用正确索引的系列以进行重命名:
(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
您可以像这样将 agg
与 lambda
一起使用:
g = z.groupby('a').agg(lambda x: [x[(x.b > 4)].c.mean(), x.b.mean()])
您必须手动重命名列:
g.columns = ['name1', 'name2']
print(g)
name1 name2
a
1 12.0 4.0
2 13.5 6.5
3 15.5 8.5