如何在 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'])
我有以下数据框,其中包含一家公司的财务数据,该公司的财政年度从 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'])