Python 关于Groupby的二次数学计算

Python 关于Groupby的二次数学计算,python,pandas,Python,Pandas,我希望做一个groupby,除了求和外,还有几个数学函数 首先,我需要按“发行”名称和“类型”分组。然后是计数、总和、平均值等 目前,我正在对相同的数据进行第二次数据库调用(见下文) 用pandas做这一切并摆脱第二次数据库调用的最佳方法是什么 谢谢 数据帧: action code comm credit date debit \ 0 + P 1309.28 0.00 2009-06-25 52371.00 1 + P 2397.4

我希望做一个groupby,除了求和外,还有几个数学函数

首先,我需要按“发行”名称和“类型”分组。然后是计数、总和、平均值等

目前,我正在对相同的数据进行第二次数据库调用(见下文)

用pandas做这一切并摆脱第二次数据库调用的最佳方法是什么

谢谢

数据帧:

 action  code comm   credit date        debit  \
0  +     P  1309.28   0.00  2009-06-25  52371.00   
1  +     P  2397.49   0.00  2009-07-31  47949.81   
2  +     P   749.78   0.00  2011-05-27  14995.65   

    issue                                              price  \
0   PR SALES TAX FING CORP RETAIL SR B RV DUE 0801...  0.1746   
1   TAX FREE PUERTO RICO FUND II INC                   8.5600   
2   PUERTO RICO FIXED INCOME FD III INC                8.6400   

   shares      type  
0  300000.000  finc  
1    5601.000  mfds  
2    1735.000  mfds  
等效数据库:

cons = c.trades_set.all () \
    .values ( 'issue', 'type' ) \
    .annotate (
    cnt = Count ( 'issue' ),
    debit = Sum ( 'debit' ),
    credit = Sum ( 'credit' ),
    shrs = Sum ( 'shares' ) / 2,
    price = Avg ( 'price' ),
    ).order_by ( 'type', 'issue' )

这里有一个解决方案。我发明了一些数据来证明这个原理

import pandas as pd

df = pd.DataFrame({'issue': ['A', 'B', 'A', 'B', 'C', 'C'],
                   'type': ['X', 'X', 'X', 'Y', 'Y', 'Y'],
                   'col1': [1, 2, 3, 4, 5, 6],
                   'col2': [7, 8, 9, 10, 11, 12],
                   'col3': [13, 14, 15, 16, 17, 18],
                   'col4': [18, 19, 20, 21, 22, 23]})

g = df.groupby(['issue', 'type'], as_index=False).agg({'col1': 'count', 'col2': 'sum',
                                                       'col3': lambda x: sum(x)/2,
                                                       'col4': lambda x: sum(x)/len(x)})

#   issue type  col1  col2  col3  col4
# 0     A    X     2    16  14.0  19.0
# 1     B    X     1     8   7.0  19.0
# 2     B    Y     1    10   8.0  21.0
# 3     C    Y     2    23  17.5  22.5

这似乎有效,以前从未使用过lambda。是否有必要将此添加到公式中?只是想保持事物的整洁和包容性:g['profit']=g.credit-g。debit@diogenes,no-
agg
仅用于
groupby
对象,以便按组跨列分组。