gpt4 book ai didi

python - 在pandas中,如何计算逗号之间的项目数,在列类型之间划分?

转载 作者:行者123 更新时间:2023-11-30 22:09:55 24 4
gpt4 key购买 nike

在 python3 和 pandas 中,我有这个数据框:

df_selecao_atual.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 340 entries, 2 to 678
Data columns (total 26 columns):
cpf 339 non-null object
nome 340 non-null object
nome_completo 340 non-null object
partido 339 non-null object
uf 339 non-null object
cargo_parlamentar 340 non-null object
tipo 340 non-null object
classe 340 non-null object
numero 340 non-null object
único 340 non-null object
assunto 340 non-null object
data_inicial 340 non-null object
data_final 340 non-null object
andamento 340 non-null object
link 340 non-null object
transparencia 339 non-null object
conferencia 339 non-null object
data_conferencia 339 non-null object
resumo 332 non-null object
observacao 311 non-null object
link_noticia_tribunal_confiavel 104 non-null object
interessa 337 non-null object
ministro_relator 339 non-null object
processo_conectado 44 non-null object
situacao 337 non-null object
cadastro_push 337 non-null object
dtypes: object(26)
memory usage: 71.7+ KB

此数据框的每一行都包含有关法律诉讼的信息,每行一个法院案件

“nome”列包含人名,例如:

FULANO DE TAL
BELTRANO DA SILVA
SICRANO APARECIDO
NINGUEM AUGUSTO

“tipo”栏有诉讼类型,只有两种:

INQ
AP

“resumo”栏包含调查并在法庭诉讼中起诉的犯罪行为。但每个法律程序都可能发生一种或多种犯罪行为。犯罪行为之间用“,”分隔:

Peculato, Lavagem de Dinheiro
Corrupção passiva, Ocultação de bens, Lavagem de dinheiro
Corrupção passiva, Lavagem de dinheiro, Crimes Eleitorais
Crimes Eleitorais, Lavagem de dinheiro
Peculato
Quadrilha ou Bando, Crimes da Lei de licitações, Peculato

我需要数:

  • 每个名字

  • 按INQ和AP流程划分

  • 每个单独犯罪的出现在“,”之间

以“resumo”列上方的示例为例,如下所示:

Peculato, Lavagem de dinheiro
Corrupção passiva, Ocultação de bens, Lavagem de dinheiro
Corrupção passiva, Lavagem de dinheiro, Crimes Eleitorais
Crimes Eleitorais, Lavagem de dinheiro
Peculato
Quadrilha ou Bando, Crimes da Lei de licitações, Peculato

所有这些都是针对“John Doe”这个人的诉讼。前两行的类型为“AP”,其余的为“INQ”

然后约翰·多伊有:

1 AP for Peculato
2 AP for Lavagem de dinheiro
1 AP for Corrupção passiva
1 AP for Ocultação de bens

1 INQ for Corrupção passiva
2 INQ for Lavagem de dinheiro
2 INQ for Crimes Eleitorais
2 INQ for Peculato
1 INQ for Quadrilha ou Bando
1 INQ for Crimes da Lei de licitações

我考虑过使用数据透视表,但我遇到的问题是在每种类型的法庭案件中只需要计算一次犯罪类型。没有成功

df_selecao_atual.pivot_table(index=['nome', 'tipo', 'resumo'],aggfunc='size').reset_index()

请问有人知道我该怎么做吗?

-/-

行的示例如下

df_selecao_atual[['tipo', 'resumo', 'nome']].head(5).to_dict()
{'tipo': {2: 'INQ', 3: 'AP', 4: 'INQ', 5: 'INQ', 6: 'AP'},
'resumo': {2: 'Desvio de verbas públicas',
3: 'Desvio de verbas públicas',
4: nan,
5: 'Prestação de contas rejeitada',
6: 'Peculato, Gestão fraudulenta'},
'nome': {2: 'CÉSAR MESSIAS',
3: 'CÉSAR MESSIAS',
4: 'FLAVIANO MELO',
5: 'FLAVIANO MELO',
6: 'FLAVIANO MELO'}}

最佳答案

使用示例数据,您可以按 ', ' 进行聚合,然后使用 Counter

df2 = df.dropna().groupby(['nome', 'tipo']).resumo.agg(', '.join).str.split(', ').agg(Counter).reset_index()


nome tipo
CÉSAR MESSIAS AP {'Desvio de verbas públicas': 1}
INQ {'Desvio de verbas públicas': 1}
FLAVIANO MELO AP {'Peculato': 1, 'Gestão fraudulenta': 1, 'Desv...
INQ {'Prestação de contas rejeitada': 1}
Name: resumo, dtype: object

现在可以更轻松地按照您想要的方式设置此信息的格式。例如,

df2 = df.dropna().groupby(['nome', 'tipo']).resumo.agg(', '.join).str.split(', ').agg(Counter).reset_index()

for _, g in df2.groupby('nome'):
x = f'{_} has: '
a = [f'{v} {t} for {k}' for d,t in zip(g.resumo, g.tipo) for (k, v) in d.items()]
lines = x + '\n'.join(a)
print(lines)

产生

CÉSAR MESSIAS has: 
1 AP for Desvio de verbas públicas
1 INQ for Desvio de verbas públicas
FLAVIANO MELO has:
1 AP for Peculato
1 AP for Gestão fraudulenta
1 AP for Desvio de Verbas públicas
1 AP for Prestação de contas rejeitada
1 INQ for Prestação de contas rejeitada

关于python - 在pandas中,如何计算逗号之间的项目数,在列类型之间划分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51798913/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com