DF1
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
我在尝试运行Groupby.sum()时检查了一个标有New_Check(Amount + Payment)的新列,但最终我的Check 201为$ 2,400,这不是我想要的。
有什么想法吗?我正在使用Python 3。
答案 0 :(得分:2)
您只需将Amount添加到组中,然后使用query
保持方法链接
#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'])
输出
Check# Date Amount Payment net
1 201 12-8-2016 1200 -1000 200
答案 1 :(得分:1)
首先获取支票金额和所有付款金额:
df2 = df1.groupby('Check').agg(
{'Date': 'first', 'Amount': 'first', 'Payment': 'sum'}
).reset_index(level=1)
然后过滤:
df2['Amount'] = df2['Amount'] + df2['Payment']
df2 = df2[df2['Amount'] > 0].drop('Payment', axis=1)