我有一个包含帐户信息的数据帧:
Date | Transaction type | Amount
我已经将数据分类为存款和取款,如:
deposit = accountHistory.loc[(accountHistory['Transaction type']=="Cash In")]
withdrawal = accountHistory.loc[(accountHistory['Transaction type']=="Withdrawal")]
因此,这会返回所有存款和取款的位置。
经常账户余额似乎很容易获得:
sum(deposit["Amount"])-sum(withdrawal["Amount"])
现在,我想绘制一段时间内的账户余额图。
我应该遍历数据帧并创建一个名为Account balance
的新col吗?或者有没有更好的方法可以使用我不知道的pd
函数来实现这一点?
对于每一行,帐户余额应显示deposit - withdrawal
(截至该日期(。
要添加更多信息:我有这样的约会:
Date | Transaction type | Amount
X/Y/Z In 50
X/Y/Z Interest 1
X/Y/Z Withdrawal 20
X/Y/Z Investment 30
我想要:
Date | Transaction type | Amount | Balance
X/Y/Z In 50 50
X/Y/Z Fees 1 49
X/Y/Z Withdrawal 20 29
X/Y/Z Investment 10 19
X/Y/Z In 20 39
X/Y/Z In 10 49
X/Y/Z Withdrawal 10 39
除了使用for循环,在整个df上迭代之外,还有其他方法可以做到这一点吗?
我会使用pivot_table()
,然后创建"余额"列,作为现金流入(C(和提款(W(之间的差额。或者,您可以使用assign()
使其成为一行:
假设这是我们的数据帧:
Date Transaction type Amount
0 2021-01-01 C 100
1 2021-01-01 W 80
2 2021-02-02 C 120
3 2021-02-02 W 40
4 2021-02-03 C 200
5 2021-02-03 W 150
使用建议的答案:
df = df.pivot_table(index='Date',columns='Transaction type',values='Amount',fillna=0)
df['Balance'] = df['C'] - df['W']
输出:
Transaction type C W Balance
Date
2021-01-01 100 80 20
2021-02-02 120 40 80
2021-02-03 200 150 50
如果您想要累积值,那么只需添加.cumsum()
。因此:
df['Balance'] = (df['C'] - df['W']).cumsum()
我注意到事务类型=="在";只有当平衡增加。所有其他交易类型都会减少余额。
因此,第一步是检查事务类型。"在">表示增加(该值应保持正(按原样((,否则它实际上应该是负。
那么唯一要做的步骤就是计算累积和。
因此,计算新列的整个代码可以是:
df['Balance'] = df.Amount.where(df['Transaction type'] == 'In',
-df.Amount).cumsum()