Python 在Pandas中,如何在groupby.agg()方法中应用两个自定义公式?
我有这个df:Python 在Pandas中,如何在groupby.agg()方法中应用两个自定义公式?,python,pandas,grouping,dataframe,Python,Pandas,Grouping,Dataframe,我有这个df: A = pd.DataFrame([['Big', -2, 4, 1, 0], ['Medium', 4, 4, -1, -1], ['Big', 3, -3, -2, -1], ['Small', 0, -1, -3, 5], ['Small', 1, 4, -2, 5]], columns=['A', 'B', 'C', 'D', 'E'], index=[1, 2, 3, 4, 5]) 我想按A分组,并对其他列进行计算(“平均”、“标准”和两个
A = pd.DataFrame([['Big', -2, 4, 1, 0], ['Medium', 4, 4, -1, -1], ['Big', 3, -3, -2, -1], ['Small', 0, -1, -3, 5], ['Small', 1, 4, -2, 5]],
columns=['A', 'B', 'C', 'D', 'E'], index=[1, 2, 3, 4, 5])
我想按A分组,并对其他列进行计算(“平均”、“标准”和两个自定义)。自定义函数只计算>=0的元素,以及<0的元素。这将是输出:
A
Big Medium Small
mean std Up Down mean std Up Down mean std Up Down
B 0.50 3.53 1 1 4 Nan 1 0 0.50 0.70 2 0
C 0.50 4.94 1 1 4 Nan 1 0 1.50 3.53 1 1
D -0.50 2.12 1 1 -1 Nan 0 1 -2.50 0.70 0 2
E -0.25 0.70 1 1 -1 Nan 0 1 5.00 0.0 2 0
注意:显示器不必是这种形状,重要的是它包含了我需要的所有信息
到目前为止,我得到了这个
f = ['mean', 'std']
A.groupby(A['A']).agg(f)
B C D E
mean std mean std mean std mean std
A
Big 0.5 3.535534 0.5 4.949747 -0.5 2.121320 -0.5 0.707107
Medium 4.0 NaN 4.0 NaN -1.0 NaN -1.0 NaN
Small 0.5 0.707107 1.5 3.535534 -2.5 0.707107 5.0 0.000000
我被其他两个函数卡住了,我试着做自定义公式
function = ['mean', 'std', (lambda x: x >= 0).sum(), (lambda y: y < 0).sum()]
感谢[17]:def up(x)中的:
返回值(x>=0).sum()
....:
在[18]中:def向下(x):
return(xIt对我有效;你能更准确地告诉我你在做什么来得到那个错误吗?什么版本?函数=['mean','std',(lambda x:x>=0.sum(),(lambda y:y<0.sum())。然后我得到AttributeError:'function'对象没有属性'sum'。你能告诉我为你工作的函数是什么吗?
AttributeError: 'function' object has no attribute 'sum'
In [17]: def up(x):
return (x>=0).sum()
....:
In [18]: def down(x):
return (x<0).sum()
....:
In [19]: f = ['mean', 'std', up, down]
In [20]: A.groupby(A['A']).agg(f)
Out[20]:
B C D \
mean std up down mean std up down mean std
A
Big 0.5 3.535534 1 1 0.5 4.949747 1 1 -0.5 2.121320
Medium 4.0 NaN 1 0 4.0 NaN 1 0 -1.0 NaN
Small 0.5 0.707107 2 0 1.5 3.535534 1 1 -2.5 0.707107
E
up down mean std up down
A
Big 1 1 -0.5 0.707107 1 1
Medium 0 1 -1.0 NaN 0 1
Small 0 2 5.0 0.000000 2 0