2017-10-19 16 views
1

Cela devrait être évident, mais je ne peux pas le faire fonctionner.Ajouter un vecteur de données au tableau de données

J'ai un dataframe de pandas géants A avec les noms de colonnes et d'index:

A = pd.DataFrame([[10, 20], [4, 5], [20, 30]], 
       columns = ['col1', 'col2'], 
       index = ['row1', 'row2', 'row3']) 

     col1 col2 
row1 10 20 
row2  4  5 
row3 20 30 

Puis j'ai une autre dataframe B avec une seule ligne (sans nom, donc défaut 0) et les mêmes noms de colonnes que A

B = pd.DataFrame([[100, 200]], 
       columns = ['col1', 'col2']) 
     col1 col2 
0  100 200 

Je veux ajouter a + B j'OBTIENNENT une nouvelle dataframe C:

 col1 col2 
row1 110 220 
row2 104 205 
row3 120 230 

La chose la plus évidente serait de faire:

A + B 

     col1 col2 
row1 NaN NaN 
row2 NaN NaN 
row3 NaN NaN 
0  NaN NaN 

Alors j'ai essayé

A.sum(B) 

TypeError: 'DataFrame' objects are mutable, thus they cannot be hashed 

Est-ce que je manque quelque chose? les tableaux numpy feront le travail super facilement, qu'est-ce qui ne va pas avec les dataframes?

Je sais les noms d'index ne correspondent pas, mais je veux appliquer le vecteur B à toutes les lignes de A.

Répondre

2

Vous devez créer Series de B en sélectionnant par loc ou iloc puis utilisez add:

df = A.add(B.iloc[0]) 
print (df) 
     col1 col2 
row1 110 220 
row2 104 205 
row3 120 230 

Détail:

print (B.iloc[0]) 
col1 100 
col2 200 
Name: 0, dtype: int64 

Ou en utilisant son nom d'index:

df = A.add(B.loc[0]) 

print (B.loc[0]) 
col1 100 
col2 200 
Name: 0, dtype: int64 
2

Utilisez

In [4472]: A + B.iloc[0] 
Out[4472]: 
     col1 col2 
row1 110 220 
row2 104 205 
row3 120 230