2017-10-20 15 views
1

Avoir des données comme.Obtenez des sommes regroupées par date par la même colonne filtrée par 2 conditions

 TransactionId UserId transaction_date transaction_status amount_USD 
0  3996625673 1298122  2015-08-11   CHARGED  10,96 
1  5797849338 1125916  2015-08-11   DECLINED  14,7 
2  9535361884 8009005  2015-08-11   CHARGED  10,61 
3  8410989235 1123856  2015-07-29   DECLINED  10,96 

Besoin d'obtenir la somme par amount_usd colonne en cas de transaction_date, transaction_status

 
transaction_date CHARGED DECLINED 
2015-07-29    0  10,96 
2015-08-11   21,57 14,7 

essayé de le faire de la manière comme

 
df[df['transaction_status']=='DECLINED']['amount_USD'].groupby('transaction_date').sum() 

Répondre

3

Utilisez replace pour la première numérique, puis groupby avec agréger sum, puis remodeler par unstack:

#or use parameter decimal=',' to read_csv 
df['amount_USD'] = df['amount_USD'].replace(',','.', regex=True).astype(float) 

df = df.groupby(['transaction_date','transaction_status'])['amount_USD'] 
     .sum() 
     .unstack(fill_value=0) 
print (df) 
transaction_status CHARGED DECLINED 
transaction_date      
2015-07-29    0.00  10.96 
2015-08-11   21.57  14.70 

Alternative avec pivot_table, grâce Bharath shetty:

df = df.pivot_table(index='transaction_date', 
        columns='transaction_status', 
        values='amount_USD', 
        aggfunc='sum', 
        fill_value=0) 
print (df) 

transaction_status CHARGED DECLINED 
transaction_date      
2015-07-29    0.00  10.96 
2015-08-11   21.57  14.70 

Dernière pour la colonne de l'utilisation d'index reset_index et rename_axis:

df = df.reset_index().rename_axis(None, axis=1) 
print (df) 
    transaction_date CHARGED DECLINED 
0  2015-07-29  0.00  10.96 
1  2015-08-11 21.57  14.70 
+0

Vous pouvez également utiliser un tableau croisé dynamique vous ajouter que – Dark

+0

'df. pivot_table (index = ['transaction_date'], colonnes = ['transaction_status'], valeurs = 'amount_USD', aggfunc = 'sum'). fillna (0) ' – Dark