Jas*_*son 6 group-by aggregate subtotal pandas
这是我的代码:
import StringIO
from pandas import *
import numpy as np
df = read_csv(StringIO.StringIO('''Col1 Col2 A B
A D 1 6
A E 2 7
B D 3 8
B E 4 9
C D 5 19'''), delimiter='\t')
df['buc1'] = cut(df['A'], bins = [0, 2, 6, 8])
aggFunc = {'A': sum,
'B': np.average
}
Run Code Online (Sandbox Code Playgroud)
运行后:
df.groupby(['buc1']).agg(aggFunc)
Run Code Online (Sandbox Code Playgroud)
我得到:
A B
buc1
(0, 2] 3 6.5
(2, 6] 12 12.0
(6, 8] NaN NaN
Run Code Online (Sandbox Code Playgroud)
我的问题是:
例如:
buc1 A B
(0, 2] 3 6.5
(2, 6] 12 12
Total 15 9.8
Run Code Online (Sandbox Code Playgroud)
请注意,第二列的总行将是平均值,而不是总和。
要删除na记录,您可以使用.dropna()dataframe 方法。
df['buc1'] = df['buc1'].astype(object)
result = df.groupby(['buc1']).agg(aggFunc).dropna()
result
A B
buc1
(0, 2] 3 6.5
(2, 6] 12 12.0
Run Code Online (Sandbox Code Playgroud)
至于边际总数,理论上这应该有效:
result_alternative = pd.pivot_table(df,index='buc1',
aggfunc=aggFunc,
values=['A','B'],
margins=True)
result_alternative
A B
buc1
(0, 2] 3 6.5
(2, 6] 12 12.0
All 15 9.8
Run Code Online (Sandbox Code Playgroud)
但它引发了与 相关的错误,我认为这是一个应该修复的错误,因此它可以在您的机器上运行(尽管我运行的是 0.17 版)
同一个链接有一个与分类变量相关的变通方法——首先将它作为一个对象进行转换,上面的调用应该是好的。
编辑:
如果您想继续使用 groupby 语义,您可以添加一行总计,如下所示:
rowtotal = result.sum()
rowtotal.name = 'rowtotal'
result.append(rowtotal)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12836 次 |
| 最近记录: |