Ajouter ou Subract deux colonnes dans une trame de données sur la base de la colonne?

Zanthoxylum Piperitum:

Je df avec trois a le nom de colonnes, le montant et le type. Je suis en train d'ajouter ou de valeurs subract à l'utilisateur sur la base du type

Voici mon exemple df

    name    amount  type                  
0   John    10      ADD
1   John    20      ADD
2   John    50      ADD
3   John    50      SUBRACT
4   Adam    15      ADD
5   Adam    25      ADD
6   Adam    5       ADD
7   Adam    30      SUBRACT
8   Mary    100     ADD

Ma df résultante

    name    amount                    
0   John    30      
1   Adam    15      
2   Mary    100   
Jezréel:

L' idée est multiple par 1cas ADDet -1si la SUBRACTcolonne et globale sum:

df1 = (df['amount'].mul(df['type'].map({'ADD':1, 'SUBRACT':-1}))
                   .groupby(df['name'], sort=False)
                   .sum()
                   .reset_index(name='amount'))
print (df1)
   name  amount
0  John      30
1  Adam      15
2  Mary     100

détail :

print (df['type'].map({'ADD':1, 'SUBRACT':-1}))
0    1
1    1
2    1
3   -1
4    1
5    1
6    1
7   -1
8    1
Name: type, dtype: int64

Est également possible de spécifier que des valeurs négatives avec numpy.wheredes multiples par -1et tout autre par 1:

df1 = (df['amount'].mul(np.where(df['type'].eq('SUBRACT'), -1, 1))
                   .groupby(df['name'], sort=False)
                   .sum()
                   .reset_index(name='amount'))
print (df1)

   name  amount
0  John      30
1  Adam      15
2  Mary     100

Je suppose que tu aimes

Origine http://43.154.161.224:23101/article/api/json?id=365111&siteId=1
conseillé
Classement