如何遍历数据帧,创建一个额外的列



我有一个包含帐户信息的数据帧:

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()

最新更新