在pandas中,如何使用groupby从列中找到的条件计算行数?

2024-05-29 10:39:18 发布

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

在python3和pandas中,我有一个数据帧:

candidatos_senado.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 88 entries, 17 to 650
Data columns (total 26 columns):
cpf                                88 non-null object
nome                               88 non-null object
nome_completo                      88 non-null object
partido                            88 non-null object
uf                                 88 non-null object
cargo_parlamentar                  88 non-null object
tipo                               88 non-null object
classe                             88 non-null object
numero                             88 non-null object
único                              88 non-null object
assunto                            88 non-null object
data_inicial                       88 non-null object
data_final                         88 non-null object
andamento                          88 non-null object
link                               88 non-null object
transparencia                      88 non-null object
conferencia                        88 non-null object
data_conferencia                   88 non-null object
resumo                             88 non-null object
observacao                         86 non-null object
link_noticia_tribunal_confiavel    33 non-null object
interessa                          87 non-null object
ministro_relator                   88 non-null object
processo_conectado                 8 non-null object
situacao                           88 non-null object
cadastro_push                      88 non-null object
dtypes: object(26)
memory usage: 18.6+ KB

此数据框的每一行都有关于法律程序的信息,每行一个法院案例

“nome”列有人名,例如:

FULANO DE TAL
BELTRANO DA SILVA
SICRANO APARECIDO
NINGUEM AUGUSTO

“tipo”列只有两种类型:

INQ
AP

我计算了每个名称中有多少AP和多少INQ,并创建了一个数据帧:

conta = candidatos_senado.groupby(['tipo','nome']).size().reset_index()
conta.columns = ['type_of_court_case', 'name', 'count']
conta.reset_index()

    index   type_of_court_case  name           count
0   0       AP              ALFREDO NASCIMENTO  1
1   1       AP              IZALCI LUCAS        1
2   2       AP              JOSÉ REINALDO       1
3   3       AP              RENAN CALHEIROS     1
4   4       AP              SÉRGIO PETECÃO      2
5   5       AP              ZECA DO PT          2
6   6       INQ             ALFREDO NASCIMENTO  5
7   7       INQ             CRISTOVAM BUARQUE   1
8   8       INQ             EDISON LOBÃO        7

。。。你知道吗

但我的计数只能在列中找到一个条件。你知道吗

“interesta”列已键入“sim”或“não”。你知道吗

我只想在“interesta”列中的线路有“sim”时计算AP或INQ的个数,如果没有这样的条件我应该忽略该线路

拜托,有人知道我怎么做吗?你知道吗


Tags: columns数据pandasdataindexobjectnullap
1条回答
网友
1楼 · 发布于 2024-05-29 10:39:18

我认为首先需要用^{}过滤DataFrame,如果可能的话,在interessa列中使用另一个值:

df = candidatos_senado[candidatos_senado["interessa"].isin(["sim", "não"])]

如果需要,也按interessa列计算:

conta = df.groupby(['tipo','nome','interessa']).size().reset_index(name='count')

如果要使用原液:

conta1 = df.groupby(['tipo','nome']).size().reset_index(name='count')

如果只想按tipo列计数:

conta2 = df.groupby('tipo').size().reset_index(name='count')

样本

candidatos_senado = pd.DataFrame({'tipo':['INQ','INQ','INQ','AP','AP','AP'],
                   'interessa':['sim','ABC','sim','d','não','não'],
                   'val':[7,8,9,4,2,3],
                   'nome':list('CDCDCD')})

print (candidatos_senado)
  tipo interessa  val nome
0  INQ       sim    7    C
1  INQ       ABC    8    D
2  INQ       sim    9    C
3   AP         d    4    D
4   AP       não    2    C
5   AP       não    3    D

df = candidatos_senado[candidatos_senado["interessa"].isin(["sim", "não"])]

conta = df.groupby(['tipo','nome','interessa']).size().reset_index(name='count')
print (conta)
  tipo nome interessa  count
0   AP    C       não      1
1   AP    D       não      1
2  INQ    C       sim      2

conta1 = df.groupby(['tipo','nome']).size().reset_index(name='count')
print (conta1)
  tipo nome  count
0   AP    C      1
1   AP    D      1
2  INQ    C      2

conta2 = df.groupby('tipo').size().reset_index(name='count')
print (conta2)
  tipo  count
0   AP      2
1  INQ      2

相关问题 更多 >

    热门问题