0
votes

Soustrayez les lignes de deux dataframes sur la base de la valeur de l'index

J'ai deux dataframes: xxx

Je voudrais soustraire les valeurs dans df1 avec les valeurs dans df2 en fonction du jour et créer un nouveau Dataframe appelé delta_values ​​. S'il n'y a pas d'entrées pour la journée, aucune action ne devrait se produire.

pour expliquer davantage: B dans la colonne Nom a uniquement des valeurs pour les jours 1 et 2. df2 devrait soustraire ses valeurs associées aux jours 1 et 2 Avec B S pour les jours 1 et 2, mais depuis B n'a aucune valeur pour les jours 3 et 4, aucun arithmétique ne devrait se produire. J'ai des problèmes avec cette partie.

La sortie que je recherche est

sortie


1 commentaires

S'il vous plaît ne partagez pas d'informations comme des images à moins que ce soit absolument nécessaire. Voir: meta.stackverflow .Com / Questions / 303812 / ... , iDownvotedbecau.se/imageofcode , Idownvotedbecau.se/imageofanException .


3 Réponses :


0
votes

Si rien ne vaut mieux à l'esprit de quelqu'un, voici une solution correcte mais pas très élégante:

result.columns = 'Day', 'Name', 'Value'
result.Value = result.Value.astype(int)
result.sort_values(['Name', 'Day'], inplace=True)
result = result[['Name', 'Value', 'Day']]


0 commentaires

0
votes

Nous pouvons fusionner les deux dataframe sur la colonne code> code>, puis soustraire de là.

merged = df1.merge(df2, how='inner', on='Day', suffixes=('', '_y'))

print(merged)

  Name  Value  Day Name_y  Value_y
0    A     10    1      C        1
1    A      9    2      C        2
2    A      8    3      C        3
3    A     10    4      C        4
4    B     99    1      C        1
5    B     88    2      C        2

delta_values = df1.copy()
delta_values['Value'] = merged['Value'] - merged['Value_y']
print(delta_values)

  Name  Value  Day
0    A      9    1
1    A      7    2
2    A      5    3
3    A      6    4
4    B     98    1
5    B     86    2


0 commentaires

0
votes

vous pouvez faire avec mapper ou fusionner . Voici une solution Solution: xxx

sortie: xxx


0 commentaires