如何使用sum和count制作一个groupby?

时间:2018-04-23 14:50:59

标签: python pandas group-by

在Python3和pandas中我有这个数据帧:

import pandas as pd
emendas_exec_geral = pd.read_csv("emendas_geral_autores.csv",sep=',',encoding = 'utf-8')

emendas_exec_geral.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 43732 entries, 0 to 43731
Data columns (total 10 columns):
Autor               43732 non-null object
Emenda              43732 non-null object
UO_Ajustada         43732 non-null object
Funcional           43732 non-null object
Acao_e_Subtitulo    43732 non-null object
Valor_aprovado      43732 non-null float64
Empenhado           43732 non-null float64
Depesa_Executada    43732 non-null float64
Pago                43732 non-null float64
ano_execucao        43732 non-null int64
dtypes: float64(4), int64(1), object(5)
memory usage: 3.3+ MB

# I only select 2015
ano2015 = emendas_exec_geral[(emendas_exec_geral['ano_execucao'] == 2015)]

# I make a groupby in "UO_Ajustada" and make a sum in column "Empenhado"
ano2015.groupby("UO_Ajustada").Empenhado.sum().reset_index()
UO_Ajustada     Empenhado
0   COLÉGIO PEDRO II    899170.00
1   COMANDO DA AERONÁUTICA - ADMINISTRAÇÃO DIRETA   2342837.63
2   COMANDO DA MARINHA - ADMINISTRAÇÃO DIRETA   3429526.71
3   COMANDO DO EXÉRCITO - ADMINISTRAÇÃO DIRETA  6243558.10
4   COMPANHIA DE DESENVOLVIMENTO DOS VALES DO SÃO ...   70147265.05
5   COMPLEXO HOSPITALAR E DE SAÚDE DA UNIVERSIDADE...   190000.00
6   COMPLEXO HOSPITALAR E DE SAÚDE DA UNIVERSIDADE...   1297216.90
7   COMPLEXO HOSPITALAR E DE SAÚDE DA UNIVERSIDADE...   0.00
8   CONSELHO NACIONAL DE DESENVOLVIMENTO CIENTÍFIC...   1502789.00
9   CONSELHO NACIONAL DE JUSTIÇA    0.00
10  DEFENSORIA PÚBLICA DA UNIÃO - DPU   500000.00
...

df = ano2015.groupby("UO_Ajustada").Empenhado.sum().reset_index()
df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 175 entries, 0 to 174
Data columns (total 2 columns):
UO_Ajustada    175 non-null object
Empenhado      175 non-null float64
dtypes: float64(1), object(1)
memory usage: 2.8+ KB

但是我想在这个新的数据框中再添加一列:“UO_Ajustada”中出现的“Empenhado” - Empenhado.count() - 一个名为“Counting”的列

请问,有没有办法直接在groupby的命令下执行此操作?

2 个答案:

答案 0 :(得分:2)

带列表的简单DT函数

agg

答案 1 :(得分:1)

希望你的目标是:

ano2015.groupby("UO_Ajustada").agg({'Empenhado': {'Empenhado': np.sum},
                                    'UO_Ajustada': {'Counting': lambda x: ('Empenhado' in x).sum()}})