从大熊猫的累积损益表报告中获取每个季度的delta值

时间:2017-10-24 06:55:27

标签: python pandas finance financial accounting

从累积损益表报告中获取每个季度的价值与pandas

有没有办法用python / pandas做什么?

我有一个像下面这样的示例数据集。 (请假设该公司的财政年度是从1月到12月)

qend    revenue profit
2015-03-31  2,453   298
2015-06-30  5,076   520
2015-09-30  8,486   668
2015-12-31  16,724  820
2016-03-31  1,880   413
2016-06-30  3,989   568
2016-09-30  7,895   621
2016-12-31  16,621  816

我想知道这家公司每季度的收入和利润是多少。 但该报告仅显示累计数字。

在这种情况下,Q1很好。但是从第二季度到第四季度,我必须从上个季度获得差异。

这是我期待的结果。

qend    revenue profit  mycommment
2015-03-31  2,453   298 copy from Q1  
2015-06-30  2,623   222 delta of Q1 and Q2
2015-09-30  3,410   148 delta of Q2 and Q3
2015-12-31  8,238   152 delta of Q3 and Q4
2016-03-31  1,880   413 copy from Q1  
2016-06-30  2,109   155 delta of Q1 and Q2
2016-09-30  3,906   53  delta of Q2 and Q3
2016-12-31  8,726   195 delta of Q3 and Q4

难点在于它不仅仅是从最后一行获得增量,因为每个Q1不需要delta值,而Q2-4的其余部分需要增量值。 如果熊猫没有简单的方法,我会用python编写它。

1 个答案:

答案 0 :(得分:1)

我认为首先需要quarter进行查找,然后按条件添加diff的值:

m = df['qend'].dt.quarter == 1
df['diff_profit'] = np.where(m, df['profit'], df['profit'].diff())
#same as
#df['diff_profit'] = df['profit'].where(m, df['profit'].diff())
print (df)
        qend revenue  profit  diff_profit
0 2015-03-31   2,453     298        298.0
1 2015-06-30   5,076     520        222.0
2 2015-09-30   8,486     668        148.0
3 2015-12-31  16,724     820        152.0
4 2016-03-31   1,880     413        413.0
5 2016-06-30   3,989     568        155.0
6 2016-09-30   7,895     621         53.0
7 2016-12-31  16,621     816        195.0

或者:

df['diff_profit'] = np.where(m, df['profit'], df['profit'].shift() - df['profit'])
print (df)
        qend revenue  profit  diff_profit
0 2015-03-31   2,453     298        298.0
1 2015-06-30   5,076     520       -222.0
2 2015-09-30   8,486     668       -148.0
3 2015-12-31  16,724     820       -152.0
4 2016-03-31   1,880     413        413.0
5 2016-06-30   3,989     568       -155.0
6 2016-09-30   7,895     621        -53.0
7 2016-12-31  16,621     816       -195.0

详情:

print (df['qend'].dt.quarter)
0    1
1    2
2    3
3    4
4    1
5    2
6    3
7    4
Name: qend, dtype: int64