在python3和pandas中,我有以下数据帧:
df_total.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 388950 entries, 0 to 12533
Data columns (total 22 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 IdPedido 388950 non-null object
1 ProtocoloPedido 388950 non-null object
2 OrgaoDestinatario 388950 non-null object
3 Situacao 388950 non-null object
4 DataRegistro 388950 non-null object
5 ResumoSolicitacao 388950 non-null object
6 DetalhamentoSolicitacao 388950 non-null object
7 PrazoAtendimento 388950 non-null object
8 FoiProrrogado 388950 non-null object
9 FoiReencaminhado 388950 non-null object
10 FormaResposta 388950 non-null object
11 OrigemSolicitacao 388950 non-null object
12 IdSolicitante 388950 non-null object
13 CategoriaPedido 388950 non-null object
14 SubCategoriaPedido 388950 non-null object
15 NumeroPerguntas 388950 non-null object
16 DataResposta 388950 non-null object
17 Resposta 388950 non-null object
18 TipoResposta 388950 non-null object
19 ClassificacaoTipoResposta 388950 non-null object
20 OrgaoSuperiorAssociadoaoDestinatario 205394 non-null object
21 id_ano 388950 non-null object
dtypes: object(22)
memory usage: 68.3+ MB
这是一个关于巴西信息访问请求的数据框架。“OrgaoDestinatorio”列中有接收请求的机构的名称。“TipoResposta”列是对请求的响应类型
我数了两列
df_total['OrgaoDestinatario'].value_counts()
ME - Ministério da Economia 42559
MS – Ministério da Saúde 17196
ANEEL – Agência Nacional de Energia Elétrica 12996
INSS – Instituto Nacional do Seguro Social 11059
MAPA – Ministério da Agricultura, Pecuária e Abastecimento 10215
...
EBSERH - HUJB-UFCG - Hospital Universitário Júlio Maria Bandeira de Mello 38
EBSERH - HUAP-UFF - Hospital Universitário Antônio Pedro 23
EBSERH - HUAC-UFCG - Hospital Universitário Alcides Carneiro 17
EBSERH - HC-UFPE - Hospital das Clínicas de Pernambuco 14
EBSERH - HC-UFU - Hospital de Clínicas de Uberlândia 7
Name: OrgaoDestinatario, Length: 305, dtype: int64
df_total['TipoResposta'].value_counts()
Acesso Concedido 278712
Acesso Negado 25187
Não se trata de solicitação de informação 23719
Acesso Parcialmente Concedido 18365
Informação Inexistente 13794
Órgão não tem competência para responder sobre o assunto 13233
Pergunta Duplicada/Repetida 8677
Encaminhado para o e-Ouv 7263
Name: TipoResposta, dtype: int64
以及实体“TipoResposta”中的子计数。例如:
eco = df_total[(df_total['OrgaoDestinatario'] == 'ME - Ministério da Economia')]
eco['TipoResposta'].value_counts()
Acesso Concedido 22928
Não se trata de solicitação de informação 7887
Acesso Negado 4070
Encaminhado para o e-Ouv 3115
Órgão não tem competência para responder sobre o assunto 1291
Pergunta Duplicada/Repetida 1134
Informação Inexistente 1124
Acesso Parcialmente Concedido 1010
Name: TipoResposta, dtype: int64
我想创建一个新的数据框,其中有一列名为“实体列表”,每一行都包含“OrgaoDestinatorio”信息,而不重复它(在本例中为305行)。例如:
list_of_entities
ME - Ministério da Economia
CEF – Caixa Econômica Federal
MS – Ministério da Saúde
ANEEL – Agência Nacional de Energia Elétrica
INSS – Instituto Nacional do Seguro Social
BACEN – Banco Central do Brasil
MAPA – Ministério da Agricultura, Pecuária e Abastecimento
…
其他栏目的名称见“TipoResposta”:“Acesso Concedido”、“Não se trata de requestaão de informaão”、“Acesso Negado”
但这些列中的每一行都会有一个数学帐户的结果,一个相对于“实体列表”值的数字:各实体的“TipoResposta”类别之和除以该实体的总请求,乘以100。示例:
“经济部长”有42559项请求,在“Acesso Concedido”项下有22928项请求。所以它是22928/42559*100=53.87,所以在新的数据框中,在“经济部长”行和“Acesso Concedido”列中,会有53,87的值
其他“TipoResposta”列的账户类型相同。在下一行中,使用其他类型的“OrgaoDestinatorio”,在列中重复相同类型的帐户
请问,有人知道我如何使用Python来实现这一点吗
--/--
二月二十七日版
通过这些步骤,我能够生成包含所需信息的数据帧
# First I made a value_counts for the items of 'OrgaoDestinatario', saved it as a dataframe and renamed the columns
conta_orgao = df_total['OrgaoDestinatario'].value_counts().reset_index()
conta_orgao.rename(columns={"index": "nome_orgao"}, inplace=True)
conta_orgao.rename(columns={"OrgaoDestinatario": "conta_vez"}, inplace=True)
conta_orgao.reset_index().head()
index nome_orgao conta_vez
0 0 ME - Ministério da Economia 42559
1 1 MS – Ministério da Saúde 17196
2 2 ANEEL – Agência Nacional de Energia Elétrica 12996
3 3 INSS – Instituto Nacional do Seguro Social 11059
4 4 MAPA – Ministério da Agricultura, Pecuária e A... 10215
# Then a groupby with two columns ('OrgaoDestinatario','TipoResposta') and with size, and renamed the column with the count, and saved it as a dataframe
conta_tipo = df_total.groupby(['OrgaoDestinatario','TipoResposta']).size().reset_index()
conta_tipo.rename(columns={0: "conta_por_orgao"}, inplace=True)
conta_tipo.reset_index().head()
index OrgaoDestinatario TipoResposta conta_por_orgao
0 0 ABGF - Agencia Brasileira Gestora de Fundos Ga... Acesso Concedido 153
1 1 ABGF - Agencia Brasileira Gestora de Fundos Ga... Acesso Negado 25
2 2 ABGF - Agencia Brasileira Gestora de Fundos Ga... Acesso Parcialmente Concedido 23
3 3 ABGF - Agencia Brasileira Gestora de Fundos Ga... Informação Inexistente 40
4 4 ABGF - Agencia Brasileira Gestora de Fundos Ga... Não se trata de solicitação de informação 143
# I made a copy of this dataframe with another name to group the final results afterwards
contagem_geral = conta_tipo.copy()
# This function reads all the lines of the copied dataframe above
# And create a new column
# First I load the name of each 'OrgaoDestinatario' in the variable "orgao"
# Then the size value of the groupby of 'OrgaoDestinatario' and 'TipoResposta' in the "conta_por_orgao" variable
# And then iterate on the other dataframe with the total number of items in each 'OrgaoDestinatario'
# And I load in a variable the 'OrgaoDestinatario' of this iteration and put it in "orgao_vez"
# And I load the value_counts of 'OrgaoDestinatario', in "total"
# If "orgao" and "orgao_vez" I count the proportion
# And I send this value to be placed in the new column that I had created on the dataframe copies
# And it continues on all lines
def limpeza(linha):
orgao = linha["OrgaoDestinatario"]
conta_por_orgao = linha["conta_por_orgao"]
for num, row in conta_orgao.iterrows():
orgao_vez = row['nome_orgao']
total = row['conta_vez']
if orgao == orgao_vez:
valor = int(conta_por_orgao) / int(total) * 100
valor = float(valor)
return valor
contagem_geral["proporcao_em_relacao_ao_total_do_orgao"] = contagem_geral.apply(limpeza, axis=1)
contagem_geral.reset_index().head()
index OrgaoDestinatario TipoResposta conta_por_orgao proporcao_em_relacao_ao_total_do_orgao
0 0 ABGF - Agencia Brasileira Gestora de Fundos Ga... Acesso Concedido 153 28.544776
1 1 ABGF - Agencia Brasileira Gestora de Fundos Ga... Acesso Negado 25 4.664179
2 2 ABGF - Agencia Brasileira Gestora de Fundos Ga... Acesso Parcialmente Concedido 23 4.291045
3 3 ABGF - Agencia Brasileira Gestora de Fundos Ga... Informação Inexistente 40 7.462687
4 4 ABGF - Agencia Brasileira Gestora de Fundos Ga... Não se trata de solicitação de informação 143 26.679104
目前没有回答
相关问题 更多 >
编程相关推荐