如何在忽略重复值的情况下生成透视表?

2024-05-19 11:04:15 发布

您现在位置:Python中文网/ 问答频道 /正文

在Python3和pandas中,我有数据帧:

import pandas as pd
consolidado = pd.read_csv("empresas_de_seguranca_consolidado_final - Página1.csv",sep=',',encoding = 'utf-8', converters={'cnpj': lambda x: str(x)})

consolidado.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1229 entries, 0 to 1228
Data columns (total 30 columns):
cnpj                                1229 non-null object
CNAE_principal                      1176 non-null object
nome_empresa                        1229 non-null object
nome_empresa_maiuscula_minuscula    1004 non-null object
estado                              1004 non-null object
indicador                           1147 non-null float64
documento                           1147 non-null object
qualificacao                        1147 non-null object
socio                               1153 non-null object
socio_maiuscula_minuscula           1008 non-null object
data_abertura                       1229 non-null object
logradouro                          1229 non-null object
numero_logradouro                   1229 non-null object
complemento                         689 non-null object
cep                                 1001 non-null object
bairro                              1227 non-null object
municipio                           1229 non-null object
regiao                              531 non-null object
telefone                            827 non-null object
email                               368 non-null object
situacao                            1229 non-null object
data_situacao_baixa                 498 non-null object
capital_social                      908 non-null object
Unnamed: 23                         2 non-null object
cargo_relacionado_socio             200 non-null object
observacao                          337 non-null object
situacao_funcional                  173 non-null object
sede_situacao                       144 non-null object
armas_autorizadas                   1 non-null object
autorizacao_pf                      249 non-null object
dtypes: float64(1), object(29)
memory usage: 288.1+ KB

“cnpj”列是可以重复两次或多次的代码。“市政”一栏是城市的名称

colunas_selecionadas = ["cnpj", "municipio"]
consolidado[colunas_selecionadas].head(10)
    cnpj    municipio
0   33074659000141  RIO DE JANEIRO
1   33074659000141  RIO DE JANEIRO
2   31735806000151  SAO GONCALO
3   31735806000151  SAO GONCALO
4   31735806000151  SAO GONCALO
5   34148932000106  RIO DE JANEIRO
6   34148932000106  RIO DE JANEIRO
7   42146902000180  RIO DE JANEIRO
8   42146902000180  RIO DE JANEIRO
9   33746207000169  RIO DE JANEIRO

我想知道每个“市”有多少个“cnpj”代码,所以我需要忽略重复的“cnpj”

请问,我应该用透视表吗?怎样?你知道吗

更详细的版本

例如,名为“SAO JOAO DE MERITI”的“municipio”有36行CNPJ代码。但这些代码可以重复两次或更多次

去掉“cnpj”的重复时,“市政府”SAO JOAO DE MERITI有20个cnpj代码

df = consolidado[(consolidado['municipio'] == 'SAO JOAO DE MERITI')]
colunas_selecionadas = ["cnpj", "municipio"]

df[colunas_selecionadas]
    cnpj    municipio
41  40192148000190  SAO JOAO DE MERITI
121     32009789000138  SAO JOAO DE MERITI
122     32009789000138  SAO JOAO DE MERITI
168     02523153000149  SAO JOAO DE MERITI
169     02523153000149  SAO JOAO DE MERITI
173     02604326000153  SAO JOAO DE MERITI
174     02604326000153  SAO JOAO DE MERITI
175     02604326000153  SAO JOAO DE MERITI
280     04162974000122  SAO JOAO DE MERITI
281     04162974000122  SAO JOAO DE MERITI
292     04628016000102  SAO JOAO DE MERITI
293     04628016000102  SAO JOAO DE MERITI
498     08579209000163  SAO JOAO DE MERITI
499     08579209000163  SAO JOAO DE MERITI
526     09178711000125  SAO JOAO DE MERITI
527     09178711000125  SAO JOAO DE MERITI
558     10467705000177  SAO JOAO DE MERITI
684     12272376000134  SAO JOAO DE MERITI
687     12435911000120  SAO JOAO DE MERITI
751     13757756000121  SAO JOAO DE MERITI
752     13757756000121  SAO JOAO DE MERITI
818     14997691000154  SAO JOAO DE MERITI
819     14997691000154  SAO JOAO DE MERITI
843     17324127000169  SAO JOAO DE MERITI
844     17324127000169  SAO JOAO DE MERITI
845     17324127000169  SAO JOAO DE MERITI
846     17324127000169  SAO JOAO DE MERITI
1004    22530715000199  SAO JOAO DE MERITI
1006    22557478000150  SAO JOAO DE MERITI
1010    22717204000180  SAO JOAO DE MERITI
1027    22977308000124  SAO JOAO DE MERITI
1028    22977308000124  SAO JOAO DE MERITI
1116    25042072000122  SAO JOAO DE MERITI
1117    25042072000122  SAO JOAO DE MERITI
1194    27672020000165  SAO JOAO DE MERITI
1195    27672020000165  SAO JOAO DE MERITI

我用其他命令计算了这个城市,但是有很多城市可以做到这一切:

36行:

df.groupby("municipio").count().reset_index()

    municipio   cnpj    CNAE_principal  nome_empresa    nome_empresa_maiuscula_minuscula    estado  indicador   documento   qualificacao    socio   ...     situacao    data_situacao_baixa     capital_social  Unnamed: 23     cargo_relacionado_socio     observacao  situacao_funcional  sede_situacao   armas_autorizadas   autorizacao_pf
0   SAO JOAO DE MERITI  36  36  36  30  30  30  30  30  30  ...     36  13  28  0   5   11  5   3   0   9

1 rows × 30 columns

20条独特的线路

df['cnpj'].value_counts()
17324127000169    4
02604326000153    3
32009789000138    2
04628016000102    2
22977308000124    2
14997691000154    2
25042072000122    2
09178711000125    2
04162974000122    2
08579209000163    2
27672020000165    2
13757756000121    2
02523153000149    2
12435911000120    1
22557478000150    1
22717204000180    1
12272376000134    1
22530715000199    1
10467705000177    1
40192148000190    1
Name: cnpj, dtype: int64

或者

df = consolidado[(consolidado['municipio'] == 'SAO JOAO DE MERITI')]
a = len(df['cnpj'].value_counts())
a
20

Tags: dfobjectdenullsaononriocnpj

热门问题