在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
...
但是我的计数只能使用在列中找到的条件来进行。
“ interessa”列已键入“ sim”或“não”。
我只想计算“ interessa”列中具有“ sim”的行的AP或INQ的数量,如果没有这种情况,我应该忽略该行
请,有人知道我该怎么做吗?
答案 0 :(得分:1)
我认为需要先用boolean indexing
用isin
过滤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