增加python的财务季度

时间:2018-02-07 20:40:11

标签: python pandas numpy dataframe logic

我有以下示例输入数据,每季度更新一次。我想将此季度数据添加到上一季度表中,如输出中所示。我试过很多方法,但没能找到正确的方法。

输入DF:

FIRST 2007Q1 2007Q1 2007Q1 2007Q2 2007Q2 2007Q2 2007Q3 2007Q3 2007Q3 2007Q4 2007Q4 2007Q4 2008Q1 2008Q1 2008Q1

输出:

First Last 2007Q1 2006Q4 2007Q1 2006Q4 2007Q1 2006Q4 2007Q2 2007Q1 2007Q2 2007Q1 2007Q2 2007Q1 2007Q3 2007Q2 2007Q3 2007Q2 2007Q3 2007Q2 2007Q4 2007Q3 2007Q4 2007Q3 2007Q4 2007Q3 2008Q1 2007Q4 2008Q1 2007Q4 2008Q1 2007Q4

有人可以帮我解决这个问题吗?我需要这个来进行进一步的分析。谢谢!

3 个答案:

答案 0 :(得分:3)

如果您的列是字符串,请将其转换为Period对象:

df['FIRST'] = pd.PeriodIndex(df.FIRST, freq='Q')

接下来,使用pd.PeriodIndex.shift

df['LAST'] = df['FIRST'].shift(-1)

df

     FIRST   LAST
0   2007Q1 2006Q4
1   2007Q1 2006Q4
2   2007Q1 2006Q4
3   2007Q2 2007Q1
4   2007Q2 2007Q1
5   2007Q2 2007Q1
6   2007Q3 2007Q2
7   2007Q3 2007Q2
8   2007Q3 2007Q2
9   2007Q4 2007Q3
10  2007Q4 2007Q3
11  2007Q4 2007Q3
12  2008Q1 2007Q4
13  2008Q1 2007Q4
14  2008Q1 2007Q4

答案 1 :(得分:2)

如果你想要它作为一个单行:

df['LAST'] = pd.PeriodIndex(pd.to_datetime(df['FIRST']) - pd.DateOffset(months=3),freq='Q')

答案 2 :(得分:1)

您可以编写自定义函数来执行此操作:

def last_q(c):
    sp = c.split("Q")
    yr = sp[0]
    q = sp[1]
    if int(q) > 1:
        return "Q".join([yr,str(int(q)-1)])
    else:
        return "Q".join([str(int(yr)-1),"4"])

例如:

>a = pd.Series(["2017Q1", "2016Q4"])
>a
0    2017Q1
1    2016Q4
dtype: object

>a.apply(last_q)
0    2016Q4
1    2016Q3
dtype: object