2016-12-07 6 views
0

df1Pandas Groupby.sum() vermeiden Dubletten

Check# Date  Amount Payment 
100  12/1/16 $1,000 ($1,000) 
201  12/8/16 $1,200 ($900) 
201  12/8/16 $1,200 ($100) 
301  12/5/16 $450  ($450) 

Was ich versuche in einen anderen Datenrahmen getrennt zu tun ist, jede Prüfung, die mit dem aktuellen ausstehenden Betrag (Betrag - Zahlung) nicht vollständig bezahlt hat.

Zum Beispiel möchte ich die oben df1 zurückzukehren:

df2

Check # Date  Amount 
201  12/8/16 $200 

Ich habe versucht, eine Groupby.sum() auf Prüfung eine neue Spalte laufen markiert New_Check (Menge + Zahlung) aber am Ende habe ich Check 201 mit $ 2.400, was ich nicht will.

Irgendwelche Ideen? Ich verwende Python 3.

Antwort

1

zuerst die Höhe des Schecks erhalten und die Summe aller Zahlungen:

df2 = df1.groupby('Check').agg(
    {'Date': 'first', 'Amount': 'first', 'Payment': 'sum'} 
).reset_index(level=1) 

filtern Dann:

df2['Amount'] = df2['Amount'] + df2['Payment'] 
df2 = df2[df2['Amount'] > 0].drop('Payment', axis=1) 
+0

Dies gibt mir 2 Spalten, Betrag und Zahlung. Ich denke, der Filter funktioniert möglicherweise nicht richtig. Ich möchte das Netto von Betrag + Zahlung und brauche keine der Schecks, die vollständig bezahlt wurden (Betrag + Zahlung = 0). – sschade

+0

Ich verstehe. Kannst du meine Bearbeitung überprüfen? – IanS

+0

Das hat funktioniert. Vielen Dank! – sschade

2

Sie können nur Betrag der Gruppe hinzufügen und dann query verwenden, um die Methode zu halten Verkettungs

#create data 
df = pd.DataFrame({'Check#':[100,201,201,301], 
       'Date':['12-1-2016', '12-8-2016', '12-8-2016', '12-5-2-16'], 
       'Amount':[1000,1200,1200,450], 
       'Payment' : [-1000, -900, -100, -450]}) 

grouped = df.groupby(['Check#', 'Date','Amount']) 

grouped.sum() \ 
     .reset_index() \ 
     .query("Amount != -Payment") \ 
     .assign(net = lambda x: x['Amount'] + x['Payment']) 

Output

Check#  Date Amount Payment net 
1  201 12-8-2016 1200 -1000 200 
+0

Das gibt mir einen Syntaxfehler bei Abfrage ("Betrag! = -Zahlung") – sschade

+0

Überprüfen Sie jetzt. Ich habe Code für den Datenrahmen hinzugefügt, den ich vor der Antwort erstellt habe. –

+0

Aus irgendeinem Grund konnte ich Ihre Ausgabe nicht spiegeln. =/ – sschade