Dataframe d'entrée - >> p>
sortie - >> p>
C'est comme ça que je veux calculer la somme. Les valeurs dans les colonnes A et B peuvent varier. P>
Je veux regrouper ce Dataframe de manière à ce que la valeur commune de la colonne A, je dois ignorer la seule valeur actuelle de mais avoir à envisager toute valeur de B et à prendre la somme de la colonne C avec respect à la condition précédente. p>
Par exemple-- 1-- Pour A = A et B = 1, je dois ignorer la valeur de la colonne C pour B = 1, mais je dois ajouter la valeur de la colonne C où la valeur des colonnes A == A et B! = 1, et la somme devrait être 5 (2 + 3) p>
2-- Pour le groupe A = A et B = 2, je dois ignorer B = 2 mais devez considérer où a = A et B! = 2 pour A = A et B! = 2 SUM sera 4 (1 +3). P>
3 --- pour le groupe A = A, B = 3, je dois ignorer B = 3 mais devez considérer où a = A et B! = 3 Donc pour A = A et B! = 3 SUM sera 3 (1 + 2). P>
Je dois cette chose pour la valeur d'un million A, l'un A peut avoir un nombre de valeur B. P>
Tout devrait être dynamique. P>
Merci:) p>
3 Réponses :
Vous pouvez utiliser une simple itération sur les lignes Dataframe:
ss = pd.DataFrame({'A': list('aaa'), 'B': [1,2,3]})
Merci, @yolo Cela ne fonctionne pas pour de multiples valeurs de la colonne A ceci donnera une somme de retour d'une colonne complète. Pendant que j'ai besoin de la sortie uniquement pour ce groupe.
@Naveenrishishwar Pourriez-vous modifier la question avec des exemples de données où la solution échoue
Voici quelque chose que vous pouvez essayer.
Je regroupe d'abord les données basées sur la colonne A dans un nouveau Dataframe DFSUM P>
alors je transforme la colonne C pour être la somme. Ensuite, soustrayez la somme de la colonne d'origine C pour obtenir la valeur souhaitée. P> sortie est comme suit: p> A B C sum
0 a 1 1 5
1 a 2 2 4
2 a 3 3 3
3 b 1 4 11
4 b 2 5 10
5 b 3 6 9
Pour A = B, votre sortie n'est pas comme prévu.
Qu'attendez-vous pour a = b code> s'il vous plaît .. si vous y comptez, vous vous attendez à
a = b code> et
b = 1 code>,
Somme code> =
5 + 6 code>. Pour
a = b code> et
b = 2 code>,
somme code> =
4 + 6 code>. Pour
a = b code> et
b = 3 code>,
somme code> =
4 + 5 code>.
Je viens d'avoir un problème similaire. Peut-être que vous l'avez résolu maintenant, mais voici ce que j'ai fait. J'utiliserais une fonction qui calcule cette somme spéciale que vous décrivez.
def exclusion_sum(row, df): exclusion_mask = (df['A'] == row['A']) & (df['B'] != row['B']) return df[exclusion_mask]['C'].sum() + row['B'] df['sum'] = df.apply(lambda x: exclusion_sum(x, df), axis=1)
Pouvez-vous partager le code que vous avez écrit jusqu'à présent pour résoudre ce problème pls
@Joeferndz, je cherche toujours une solution.