Python 在Pandas中,如何在groupby.agg()方法中应用两个自定义公式?

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分组,并对其他列进行计算(“平均”、“标准”和两个

我有这个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分组,并对其他列进行计算(“平均”、“标准”和两个自定义)。自定义函数只计算>=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