如何使用pandas数据帧的余额列计算银行对账单借方/贷方列?

kit*_*kit 4 python dataframe pandas

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

                   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
Run Code Online (Sandbox Code Playgroud)

在上述数据帧中,"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
Run Code Online (Sandbox Code Playgroud)

Jon*_*oop 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
Run Code Online (Sandbox Code Playgroud)