Dans Pandas, comment créer une trame de données à partir d'un nombre d'éléments dans une colonne séparés par des virgules?

Reinaldo Chaves

En python3 et pandas, j'ai un dataframe qui contient pour chaque ligne des informations sur les procédures judiciaires.

La colonne "nome" a des noms de personnes, la colonne "tipo" a les types de poursuites, seulement deux types INQet AP.

Et la colonne "Resumo" contient des enquêtes sur les crimes en vue de poursuites judiciaires. Mais chaque processus juridique peut consister en un ou plusieurs crimes. Et les crimes sont séparés par ",":

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

J'ai besoin de compter:

For each name
Divided by INQ and AP processes
The appearance of each individual crime between ","

Prenons l'exemple au-dessus de la colonne "Resumo", et en supposant qu'ils concernent tous la personne "John Doe".

Les deux premières lignes sont de type APet le reste INQ, puis John Doe a:

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

Un échantillon des lignes ressemble à

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'}}

Sur cette base de données j'avais déjà une réponse qui fonctionnait très bien dans ce lien: Dans les pandas, comment compter les éléments entre virgules, en divisant entre les types de colonnes?

Mais maintenant, je dois non seulement afficher à l'écran, mais créer un dataframe. Comme ça:

nome                tipo    resumo              count
Fulano de tal       INQ     Peculato            4
Fulano de tal       INQ     Ocultação de Bens   1
Fulano de tal       INQ     Corrupção ativa     2
Fulano de tal       INQ     Investigação Penal  3
Fulano de tal       AP      Peculato            1
Fulano de tal       AP      Corrupção passiva   2
Beltrano da Silva   INQ     Peculato            2
Beltrano da Silva   INQ     Lavagem de dinheiro 5
Beltrano da Silva   AP      Lavagem de dinheiro 1

S'il vous plaît, est-ce que quelqu'un sait comment je pourrais créer ce dataframe?

Jezreel

Vous pouvez en créer une autre DataFramepar colonne et l'ajouter à l'original par , puis pour compter utiliser avec :split resumojoingroupbysize

s = (df.pop('resumo').str.split(',', expand=True)
       .stack()
       .reset_index(level=1, drop=True)
       .rename('resumo'))


df = df.join(s).groupby(['nome','tipo','resumo']).size().reset_index(name='count')
print (df)
            nome tipo                         resumo  count
0  CÉSAR MESSIAS   AP      Desvio de verbas públicas      1
1  CÉSAR MESSIAS  INQ      Desvio de verbas públicas      1
2  FLAVIANO MELO   AP             Gestão fraudulenta      1
3  FLAVIANO MELO   AP                       Peculato      1
4  FLAVIANO MELO  INQ  Prestação de contas rejeitada      1

Si vous voulez utiliser une Countersolution avec la dernière solution:

s = df.dropna().groupby(['nome', 'tipo']).resumo.agg(', '.join).str.split(', ').agg(Counter)
print (s)
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}
               INQ         {'Prestação de contas rejeitada': 1}
Name: resumo, dtype: object

df2 = (pd.DataFrame(s.values.tolist(), index=s.index)
         .stack()
         .astype(int)
         .reset_index(name='count')
         .rename(columns={'level_2':'resumo'}))
print (df2)
            nome tipo                         resumo  count
0  CÉSAR MESSIAS   AP      Desvio de verbas públicas      1
1  CÉSAR MESSIAS  INQ      Desvio de verbas públicas      1
2  FLAVIANO MELO   AP             Gestão fraudulenta      1
3  FLAVIANO MELO   AP                       Peculato      1
4  FLAVIANO MELO  INQ  Prestação de contas rejeitada      1

Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.

En cas d'infraction, veuillez [email protected] Supprimer.

modifier le
0

laisse moi dire quelques mots

0commentaires
connexionAprès avoir participé à la revue

Articles connexes

TOP liste

  1. 1

    Redirection HTTP vers HTTPS dans Java à l'aide de HTTPURLConnection

  2. 2

    Uncaught TypeError: map n'est pas une fonction dans Reactjs avec Firebase

  3. 3

    Laravel SQLSTATE [HY000] [1049] Base de données inconnue 'previous_db_name'

  4. 4

    Comment envoyer plusieurs variables de la lame au contrôleur

  5. 5

    Microsoft.WebApplication.targets

  6. 6

    Comment analyser un fichier avec un tableau d'objets JSON en utilisant Node.js?

  7. 7

    Comment définir du texte dans un QLabel et afficher les caractères '<>'?

  8. 8

    Concaténer des variables dans ansible

  9. 9

    Filtrer les données en fonction des conditions d'une trame de données

  10. 10

    Échec de l'exécution de 'insertBefore' sur 'Node': le paramètre 1 n'est pas de type 'Node'

  11. 11

    ESP8266 HADRWARE MINUTERIE, USA pour cocher une macro étrange

  12. 12

    Comment changer le navigateur par défaut en Microsoft Edge pour Jupyter Notebook sous Windows 10 ?

  13. 13

    Comment centrer un div tout en utilisant la transition et transformer avec l'échelle

  14. 14

    Stop jQuery execution after one time execution

  15. 15

    obtenir le nombre de marqueur affiché sur la carte

  16. 16

    System.Data.SqlClient.SqlException: 'Nom de colonne non valide' ApplicationRoleId '.'

  17. 17

    Générer une variable binaire avec une corrélation prédéfinie avec une variable déjà existante

  18. 18

    comment afficher un bouton au-dessus d'un autre élément ?

  19. 19

    Enregistrer le chemin de l'image de la galerie vers la base de données de la salle et l'afficher dans la liste des recycleurs

  20. 20

    php ajouter et fusionner des données de deux tables

  21. 21

    Comment utiliser le stockage local et le supprimer lorsqu'il n'est pas nécessaire

chaudétiquette

Archive