2 votes

Comment déballer les dictionnaires dans les rangées pandas dataframe

J'ai un cadre de données dans pandas qui ressemble à quelque chose comme ceci :

id   column_name_1                         column_name_2                          column_name_3        
1    {acct_nr_1: value, acct_nr_2:value}   {acct_nr_1: value, acct_nr_2:value}    {acct_nr_1: value, acct_nr_2:value}    
2    {acct_nr_1: value, acct_nr_2:value}   {acct_nr_1: value, acct_nr_2:value}    {acct_nr_1: value, acct_nr_2:value}       
3    {acct_nr_1: value, acct_nr_2:value}   {acct_nr_1: value, acct_nr_2:value}    {acct_nr_1: value, acct_nr_2:value}       
4    {acct_nr_1: value, acct_nr_2:value}   {acct_nr_1: value, acct_nr_2:value}    {acct_nr_1: value, acct_nr_2:value} 

Certains dictionnaires ont plus de deux numéros de compte, et les valeurs diffèrent. Ce que je veux faire, c'est obtenir un cadre de données avec les mêmes colonnes plus une. La nouvelle colonne doit contenir le numéro de compte (si je ne l'ai que dans le dictionnaire) et le même s'il y a plus d'un compte mais réparti en plusieurs lignes. Et dans chaque colonne, je veux obtenir uniquement les valeurs.

Le nouveau cadre de données devrait donc être le suivant :

id   account_number        column_name_1   column_name_2   column_name_3        
1    acct_nr_1             value           value           value
1    acct_nr_2             value           value           value
2    acct_nr_1             value           value           value          
2    acct_nr_2             value           value           value
3    acct_nr_1             value           value           value    
3    acct_nr_2             value           value           value
4    acct_nr_1             value           value           value
4    acct_nr_2             value           value           value

Je n'ai pas trouvé de moyen simple (ou aucun moyen) de résoudre ce problème.

Merci !

1voto

Shubham Sharma Points 39381

Empiler les df pour les convertir en séries mutliindex à deux niveaux, puis créer un nouveau dataframe à partir des dictionnaires, stack la nouvelle df pour convertir en série multindex à trois niveaux, maintenant unstack à niveau 1 pour remettre en forme le format souhaité

s = df.set_index('id').stack()

(pd.DataFrame([*s], index=s.index)
  .stack()
  .unstack(1)
  .rename_axis(['id', 'account_number'])
  .reset_index())

   id account_number column_name_1 column_name_2 column_name_3
0   1      acct_nr_1         value         value         value
1   1      acct_nr_2         value         value         value
2   2      acct_nr_1         value         value         value
3   2      acct_nr_2         value         value         value
4   3      acct_nr_1         value         value         value
5   3      acct_nr_2         value         value         value
6   4      acct_nr_1         value         value         value
7   4      acct_nr_2         value         value         value

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X