Python 关于Groupby的二次数学计算
我希望做一个groupby,除了求和外,还有几个数学函数 首先,我需要按“发行”名称和“类型”分组。然后是计数、总和、平均值等 目前,我正在对相同的数据进行第二次数据库调用(见下文) 用pandas做这一切并摆脱第二次数据库调用的最佳方法是什么 谢谢 数据帧: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
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
对象,以便按组跨列分组。