2016-12-07 8 views
0

DF1パンダGroupby.sum()私は何をしようとしている重複

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) 

を避けるため、完全に現在の残高を支払わされていない任意のチェック、別のデータフレームに分離されている(金額 - お支払い)。例えば

、私は返すように上記のDF1をしたいと思います:

DF2

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

私がチェックに新しい列ラベルNew_Check(金額+支払いをGroupby.sumを()を実行しようとしました)しかし、私はCheck 201が$ 2,400で終わるが、これは私が望むものではない。

アイデア?そして、フィルタリング

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

:私は

答えて

1

まず小切手の金額とすべての支払いの合計を取得するのPython 3を使用してい

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

これは私に2列、金額や支払いを与えます。私はフィルタが適切に動作しない可能性があります。私はAmount + Paymentのネットを必要とし、完全に支払った小切手(Amount + Payment = 0)は必要ありません。 – sschade

+0

私は理解しています。私の編集をチェックできますか? – IanS

+0

これは機能しました。ありがとうございました! – sschade

2

あなただけのグループに金額を追加することができますその後、

#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']) 

出力を連鎖方式を維持するためにqueryを使用

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

これにより、クエリ( "Amount!= - Payment")の構文エラーが発生します – sschade

+0

今すぐ確認してください。答えの前に作成したデータフレームのコードを追加しました。 –

+0

何らかの理由で、出力をミラーリングできませんでした。 =/ – sschade

関連する問題