使用 pandas 从累计损益表报告中获取每个季度的增量值

Get delta values of each quarter from cumulated income statement reports with pandas

使用 pandas

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

有什么方法可以用 python/pandas 做到吗?

我有一个如下所示的示例数据集。 (请假设该公司的财政年度是从一月到十二月)

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没问题。但是从Q2-Q4,我必须得到每个上个季度的差异。

这是我的预期结果。

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 不需要增量值,而 Q2-4 的其余部分需要增量值。 如果pandas没有简单的方法,我会用python.

编码

我认为你需要 quarter for find first and then add value of 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