Python 如何使用sum和count创建groupby?

Python 如何使用sum和count创建groupby?,python,pandas,group-by,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 c

在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
将熊猫作为pd导入
emendas_exec_geral=pd.read_csv(“emendas_geral_autores.csv”,sep=',,encoding='utf-8')
执行董事和总经理信息()
范围索引:43732个条目,0到43731
数据列(共10列):
自动43732非空对象
Emenda 43732非空对象
UO_Ajustada 43732非空对象
函数43732非空对象
Acao_e_Subtitulo 43732非空对象
Valor_aprovado 43732非空浮点64
Empenhado 43732非空浮点64
Depesa_Executada 43732非空浮点64
第43732页非空浮点64
ano_Executao 43732非空int64
数据类型:float64(4)、int64(1)、object(5)
内存使用率:3.3+MB
#我只选择了2015年
ano2015=执行董事总经理[(执行董事总经理['ano'U execucao']==2015]
#我在“UO_Ajustada”中做了一个groupby,在“Empenhado”列中做了一个合计
ano2015.groupby(“UO_Ajustada”).Empenhado.sum().reset_index()
UO_Ajustada Empenhado
0 COLÉGIO PEDRO II 899170.00
1科曼多航空公司-行政主管2342837.63
2科曼多·达马林哈-行政官切奥·迪雷塔3429526.71
3行政长官行政长官行政长官6243558.10
4德森沃尔维门托山谷酒店。。。70147265.05
5大学附属综合医院。。。190000
6大学附属综合医院。。。1297216.90
7大学附属综合医院。。。0
8国家环境保护委员会。。。1502789
9全国正义协商会议0.00
10联合国防部-DPU 500000.00
...
df=ano2015.groupby(“UO_Ajustada”).Empenhado.sum().reset_index()
df.info()
范围索引:175个条目,0到174
数据列(共2列):
UO_Ajustada 175非空对象
Empenhado 175非空浮点64
数据类型:浮点64(1),对象(1)
内存使用率:2.8+KB
但我想在这个新的数据框架中再包含一列:“UO_Ajustada”中“Empenhado”的出现次数“-Empenhado.count()”——一个名为“Counting”的列


请问,有没有办法直接在groupby的指挥下完成这项工作?

希望您的目标是:

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

希望您的目标是:

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

带有列表的简单
agg
函数

ano2015.groupby("UO_Ajustada").Empenhado.agg(['sum','count'])

带有列表的简单
agg
函数

ano2015.groupby("UO_Ajustada").Empenhado.agg(['sum','count'])

你的和和和新的列计数,有不同的键,我只能考虑合并在一起谢谢。sum()命令作用于“UO_Ajustada”。我要添加的命令Empenhado.count()也将作用于“UO_Ajustada”。这是同一个键,对吗?
ano2015.groupby(“UO_Ajustada”).Empenhado.agg(['sum','count'])
谢谢,你想让我添加一个答案吗?你的和和和新的列计数,有不同的键,我只能在案例中考虑合并谢谢。sum()命令作用于“UO_Ajustada”。我要添加的命令Empenhado.count()也将作用于“UO_Ajustada”。这是同一个键,对吗?
ano2015.groupby(“UO_Ajustada”).Empenhado.agg(['sum','count'))
谢谢,你想让我添加它作为答案吗?我还以为它应该是一个过滤器:)+1@zipa如果需要一个过滤器,我会推荐join:-)我还以为它应该是一个过滤器:)+1@zipa如果需要过滤器,我建议加入:-)