2
votes

Ajout d'une série Pandas en tant que ligne dans un DataFrame, en ignorant les colonnes non correspondantes

Disons que j'ai le cadre de données Pandas suivant, sans lignes pour le moment:

'Jeep' | 'Volvo' | 'Honda'
----------------------------
   7   |    0    |    5

J'ai la série Pandas suivante:

Honda    5
Nissan   3
Jeep     7
Toyota   2

Je souhaite ajouter cette série sous forme de ligne (sans inclure les éléments qui ne correspondent pas à un nom de colonne)

Résultat:

'Jeep' | 'Volvo' | 'Honda'
--------------------------

Est-il possible de faire ça?


2 commentaires

df = pd.DataFrame (); df.append (pd.DataFrame (pd.Series ([1,2,3], index = ['a', 'b', 'c'])). T)


Cela peut ne pas être très pertinent à part pour vous, mais collections.Counter gère la sémantique de l'ajout de deux compteurs, des clés manquantes, etc. beaucoup plus gracieusement. De plus, si vous avez une liste complète des marques de voitures, il est plus simple d'initialiser votre df à l'avance, avec zéro compte?


3 Réponses :


1
votes

Vous pouvez utiliser append pour obtenir les colonnes spécifiques:

>>> df1 = df.append(s, ignore_index=True)
>>> df1[df.columns].fillna(0)
   Jeep  Volvo  Honda
0   7.0    0.0    5.0
>>> 

Ce code est virtuellement:

>>> import pandas as pd
>>> df = pd.DataFrame(columns=['Jeep', 'Volvo', 'Honda'])
>>> s = pd.Series([5, 3, 7, 2],index=['Honda', 'Nissan', 'Jeep', 'Toyota'])
>>> df1 = df.append(s, ignore_index=True)
>>> df1[df.columns].fillna(0)
   Jeep  Volvo  Honda
0   7.0    0.0    5.0
>>> 

p>


1 commentaires

Cela semble également ajouter `` Nissan '' comme colonne. Je voudrais qu'il n'en ignore pas déjà les colonnes.



3
votes
import pandas as pd
df = pd.DataFrame(columns=['Jeep', 'Volvo', 'Honda'])  
s = pd.Series({"Honda": 5, "Nissan": 3, "Jeep": 7, "Toyota": 2})  

df.append(s[df.columns], ignore_index=True).fillna(0)

3 commentaires

Bonne idée, juste un petit tweak de la mienne :-)


Le moindre des ajustements, haha


Lol, ouais :-): p



1
votes

Vous pouvez utiliser réindexer de différentes manières décrites ci-dessous.

df.append(series.reindex(df.columns, fill_value=0).rename(len(df)))

  Jeep Volvo Honda
0    7     0     5

series.reindex(df.columns, fill_value=0).to_frame().T

   Jeep  Volvo  Honda
0     7      0      5

series.to_frame().T.reindex(df.columns, axis=1, fill_value=0)

   Jeep  Volvo  Honda
0     7      0      5


0 commentaires