如何使用Pandas数据框的余额列计算银行对帐单借方/贷方列?

时间:2019-01-23 18:06:10

标签: python pandas dataframe

我有一个数据帧,如下所示:

                   Date_1                Date_2         DR      CR      Bal
0                5 Dec 2017               5 Dec 2017    500     NaN     1000
1               14 Dec 2017               14 Dec 2017   NaN     NaN     1500
2               15 Dec 2017               15 Dec 2017   NaN     NaN     1200
3               18 Dec 2017               18 Dec 2017   NaN     NaN     1700
4               21 Dec 2017               21 Dec 2017   NaN     NaN     2000
5               22 Dec 2017                22 Dec 2017  NaN     NaN     1000

在上面的数据框“ Bal”列中包含余额值,并希望根据下一个“ Bal”量来填充DR / CR值。

我使用简单的python做到了,但是熊猫似乎可以以非常聪明的方式执行此操作。

预期输出:

                   Date_1                Date_2         DR      CR      Bal
0                5 Dec 2017               5 Dec 2017    500     NaN     1000
1               14 Dec 2017               14 Dec 2017   NaN     500     1500
2               15 Dec 2017               15 Dec 2017   300     NaN     1200
3               18 Dec 2017               18 Dec 2017   NaN     500     1700
4               21 Dec 2017               21 Dec 2017   NaN     300     2000
5               22 Dec 2017                22 Dec 2017  1000    NaN     1000

1 个答案:

答案 0 :(得分:5)

您可以使用pd.mask。首先使用diff计算余额的差额。通过使用遮罩,如果一列的绝对值为负,则用其绝对值填充,并在另一列的正值为np.nan的范围内遮盖。

diff = df['Bal'].diff()
df['DR'] = df['DR'].mask(diff < 0, diff.abs())
df['CR'] = df['CR'].mask(diff > 0, diff)

#Output
#                 Date_1  Date_2      DR     CR   Bal
#0 5  Dec 2017 5     Dec    2017   500.0    NaN  1000
#1 14 Dec 2017 14    Dec    2017     NaN  500.0  1500
#2 15 Dec 2017 15    Dec    2017   300.0    NaN  1200
#3 18 Dec 2017 18    Dec    2017     NaN  500.0  1700
#4 21 Dec 2017 21    Dec    2017     NaN  300.0  2000
#5 22 Dec 2017 22    Dec    2017  1000.0    NaN  1000