2017-10-17 3 views
1

J'ai deux trames de données avec les valeurs suivantes:La base de données n'est pas mise à jour avec des valeurs; sortie est un avertissement 'copie d'une diapositive'

DF1

   Cash 
Date    
2011-01-10 -5114.85 
2011-01-11 -5000.85 

DF2

   GOOG AAPL  XOM  IBM  Cash 
2011-01-10  0.0  0.0  0.0  0.0  -19.900 
2011-01-11  0.0  0.0  0.0  0.0  0.000 

Pour chaque entrée df1, je vérifie si cet index existe dans df2. Si l'index existe, je veux ajouter une valeur de df1 avec df2 dans df2; mettre à jour la valeur dans df2 pour la même chose dire qu'il existe dans df1.

Je suis en train de réaliser que, avec le code suivant:

for each in df1.index: 
    if each in df2.index: 
     df2.loc[each]['Cash'] = df1.loc[each]['Cash'] + df2.loc[each]['Cash'] 

La sortie de la console est:

SettingWithCopyWarning: Une valeur tente de régler sur une copie d'un tranche à partir d'un DataFrame Voir les mises en garde dans la documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy df2.loc [each] ['Cash'] = df1.loc [chaque] ['Cash'] + df2.loc [chaque] ['Cash']

Je suppose un avertissement encore me laisser exécuter le code et mettre à jour mes valeurs de colonne dans DF2 ...

Erreur

métiers cadre de données ne sont pas avec la valeur mise à jour.

Résultats escomptés

   GOOG AAPL  XOM  IBM  Cash 
2011-01-10  0.0  0.0  0.0  0.0  -5134.75 
2011-01-11  0.0  0.0  0.0  0.0  -5000.85 

Toute aide sera grandement appréciée. Merci.

Répondre

1

Vous pouvez utiliser df.index.intersection pour rechercher des index communs, puis utiliser loc pour accéder à toutes les lignes pertinentes et les ajouter.

idx = df1.index.intersection(df2.index) 
df2.loc[idx, 'Cash'] += df1.loc[idx, 'Cash'] 

print(df2) 
      GOOG AAPL XOM IBM  Cash 
2011-01-10 0.0 0.0 0.0 0.0 -5134.75 
2011-01-11 0.0 0.0 0.0 0.0 -5000.85 
+0

Je m'excuse; ce que je veux, c'est que si deux indices correspondent, ajouter de l'argent de df1 dans df2. Comme; -5114,85 + -19,9 = -5134,75 Merci. J'ai mis à jour ma sortie :(. –

+0

@Codinghierarchy Heureusement pour vous la deuxième méthode nécessite presque aucune modification pour travailler pour votre cas. –