【问题标题】:Incrementing the financial quarters in python在python中增加财务季度
【发布时间】:2018-02-07 20:40:10
【问题描述】:

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

输入 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

谁能帮我在 python 中解决这个问题。我需要这个来进行进一步的分析。谢谢!

【问题讨论】:

  • 数据类型是什么?
  • 数据框和一个字符

标签: python pandas numpy dataframe logic


【解决方案1】:

如果您的列是字符串,请将其转换为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

【讨论】:

    【解决方案2】:

    如果你想要它作为单行:

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

    【讨论】:

    • 我的回答也是单行且更短;)pd.PeriodIndex(df.FIRST, freq='Q').shift(-1)。关键是,一个班轮被高估了。
    • 确实如此。只是想增加答案的多样性。我投票支持你的答案;)
    【解决方案3】:

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

    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
    

    【讨论】:

      猜你喜欢
      • 2017-09-08
      • 1970-01-01
      • 1970-01-01
      • 2015-05-10
      • 2012-12-12
      • 2020-11-27
      • 1970-01-01
      • 2018-05-21
      • 1970-01-01
      相关资源
      最近更新 更多