如何在 pandas 中按财政年度对数据进行分组?

How do I group data by fiscal year in pandas?

我有以下数据框,其中包含一家公司的财务数据,该公司的财政年度从 3 月 1 日到 2 月的最后一天。真实数据框涵盖多个财政年度。

date fcf debt_service cash_or_overdraft cash_generated
2017Q1 38 0 -36.0 14.5
2017Q2 -24 0 -101.4 -65.3
2017Q3 21 0 -92.8 8.5
2017Q4 89 -145 -115.0 15.3
2018Q1 17 -150 -140.4 -25.8
2018Q2 36 -130 -59.5 80.8
2018Q3 50 -162 -179.9 -120.4
2018Q4 29 -147 -142.0 -6.3

我想汇总每个财政年度的数据。我尝试了以下方法。但是,它似乎是根据 日历 年而不是 财政 年汇总数据。这排除了我的总数,因为总数与实际财政年度不一致。

debt_service = df2.groupby(df2['index'].dt.year)['debt_service'].agg(['sum', 'mean', 'max'])

您可以尝试提取期间对象的年份。

data = [ {"period" : pd.Period('2018Q1', freq='Q-FEB'), "value" : 1000},
        {"period" : pd.Period('2018Q2', freq='Q-FEB'), "value" : 1000},
        {"period" : pd.Period('2018Q3', freq='Q-FEB'), "value" : 1000},
        {"period" : pd.Period('2018Q4', freq='Q-FEB'), "value" : 1000},
        {"period" : pd.Period('2019Q1', freq='Q-FEB'), "value" : 2000},
        {"period" : pd.Period('2019Q2', freq='Q-FEB'), "value" : 2000},
        {"period" : pd.Period('2019Q3', freq='Q-FEB'), "value" : 2000},
        {"period" : pd.Period('2019Q4', freq='Q-FEB'), "value" : 2000}]

df = pd.DataFrame(data)

有列表理解

df["fiscal_year"] = [x.qyear for x in df["period"].values]

或申请

def get_fiscal_year(row):
  row["fiscal_year"] = row["period"].qyear
  return row

df["fiscal_year"] = None
df = df.apply(get_fiscal_year, axis=1)

然后,进行分组:

df.groupby('fiscal_year')['debt_service'].agg(['sum','mean','max'])