0
votes

Pandas Groupby avec condition d'exclusion dans un groupe

Dataframe d'entrée - >>

 Entrez la description de l'image ici

sortie - >>

 Entrez la description de l'image ici

C'est comme ça que je veux calculer la somme. Les valeurs dans les colonnes A et B peuvent varier.

 Entrez la description de l'image ici

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.

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)

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).

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).

Je dois cette chose pour la valeur d'un million A, l'un A peut avoir un nombre de valeur B.

Tout devrait être dynamique.

Merci:)


2 commentaires

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.


3 Réponses :


1
votes

Vous pouvez utiliser une simple itération sur les lignes Dataframe:

ss = pd.DataFrame({'A': list('aaa'), 'B': [1,2,3]})


2 commentaires

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



0
votes

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> xxx pré>

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


2 commentaires

Pour A = B, votre sortie n'est pas comme prévu.


Qu'attendez-vous pour a = b s'il vous plaît .. si vous y comptez, vous vous attendez à a = b et b = 1 , Somme = 5 + 6 . Pour a = b et b = 2 , somme = 4 + 6 . Pour a = b et b = 3 , somme = 4 + 5 .



0
votes

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)


0 commentaires