6
votes

Pandas: Ajouter une ligne à Dataframe avec Multidex dans des colonnes

J'ai un fichier de données avec un multididex dans les colonnes et souhaitez utiliser des dictionnaires pour ajouter de nouvelles lignes.

Disons que chaque rangée du Dataframe est une ville. Les colonnes contiennent des "distance" et "véhicule". Et chaque cellule serait le pourcentage de la population qui choisit ce véhicule pour cette distance.

Je construisez un index comme celui-ci: xxx

alors Je crée un Dataframe: xxx

La structure du Dataframe a l'air bien. Bien que Pandas ait ajouté des nans comme valeurs par défaut?

 Disposition du Dataframe

Maintenant, je voudrais mettre en place un dictionnaire pour la nouvelle ville et ajouter Il: xxx

mais cela échoue:

ValueError: la longueur des valeurs ne correspond pas à la longueur de l'index

Voici la complète Message d'erreur (Pastebin)

< Strong> Mise à jour:

Merci pour toutes les bonnes réponses. J'ai bien peur que j'ai simplifié le problème dans mon exemple. En fait, mon indice est imbriqué de 3 niveaux (et cela pourrait devenir plus).

J'ai donc accepté la réponse universelle de convertir mon dictionnaire dans une liste de tuples. Cela pourrait ne pas être aussi propre que les autres approches, mais fonctionne pour toute configuration multididex.


2 commentaires

Je pense que les clés de la diction doivent être des tuples, par exemple, {('près', 'vélo'): 1, ('près', 'voiture'): 0 ...}


Remarque côté: Checkout pandas.multidex.from_product


5 Réponses :


2
votes

Je ne pense pas que vous ayez même besoin d'initialiser un fichier de données vide. Avec votre d , je peux obtenir la sortie souhaitée avec instable et une transposition: xxx


0 commentaires

4
votes

Vous pouvez vous ajouter à votre image de données comme ceci: xxx pré>

sortie: p> xxx pré>

L'astuce consiste à créer la ligne de Dataframe avec de_dict code> puis instable code> pour obtenir la structure de votre fichier de données d'origine avec des colonnes multiindex, puis renommer code> pour obtenir index et ANNEXE code>. p>

ou si vous ne voulez pas créer le fichier de données vide, vous pouvez d'abord utiliser cette méthode pour créer le fichier de données avec les nouvelles données. P>

dataframe.append(pd.DataFrame.from_dict(my_home_city).unstack().rename('my_home_city'))
distance     near       far     
vehicle      bike  car bike  car
city          NaN  NaN  NaN  NaN
my_home_city    1    0    0    1


0 commentaires

4
votes

Multi Index est une liste de code> de tuple code>, nous devons simplement modifier votre dict code>, puis nous pourrions attribuer directement la valeur Xxx pré>

Plus d'infos p>

d
Out[995]: 
{('far', 'bike'): 0,
 ('far', 'car'): 1,
 ('near', 'bike'): 1,
 ('near', 'car'): 0}

df.columns.values
Out[996]: array([('near', 'bike'), ('near', 'car'), ('far', 'bike'), ('far', 'car')], dtype=object)


0 commentaires

1
votes

Initialisez votre Dataframe vide à l'aide de multididex.from_product code>.

>>> df.append(pd.DataFrame(my_home_city).unstack().to_frame('my_home_city').T)
              far     near    
             bike car bike car
city                          
my_home_city    0   1    1   0


0 commentaires

0
votes

Essayez cette solution de contournement
  • Ajouter à DICT
  • puis convertissez-le à Pandas Data Cadre
  • à la dernière étape, sélectionnez les colonnes souhaitées pour créer plusieurs index avec set_index () xxx


0 commentaires