我希望使用periodIndex系列,并创建一个新的系列以'yyyy / yy'格式显示当前财务年度。例如,以英国财政年度为例-> 01/04至31/03。

 df  = pd.DataFrame({
         'dates' : pd.date_range('3/01/11', periods= 3, freq='M'),
         'amounts': np.random.randint(10, 100_000, 3)
 })

 df

      dates     amounts
0   2011-03-31  28618
1   2011-04-30  517
2   2011-05-31  69892


我期望的结果由下面的系列fy表示。我用过pd.PeriodIndex(df['dates'], freq = 'Q-MAR').strftime('%y')。到目前为止无法实现以下结果。

      dates     amounts     fy
0   2011-03-31  28618   2010/11
1   2011-04-30  517     2011/12
2   2011-05-31  69892   2011/12


先感谢您。

numpy的1.15.4

熊猫0.23.4

python 3.7.1

最佳答案

看来您需要:

df  = pd.DataFrame({
         'dates' : pd.date_range('3/01/11', periods= 20, freq='2M'),
         'amounts': np.random.randint(10, 100_000, 20)
 })


p = pd.PeriodIndex(df['dates'], freq = 'Q-MAR')
df['fy'] = [(a - b).strftime('%Y/')+(a - b + 4).strftime('%y') for a, b in zip(p, p.quarter)]


替代解决方案:

df['fy1'] = [f'{x}/{str(x + 1)[2:]}' for x in (df.dates - pd.offsets.QuarterEnd()).dt.year]

print (df)

        dates  amounts       fy
0  2011-03-31    30629  2010/11
1  2011-05-31    66159  2011/12
2  2011-07-31    48821  2011/12
3  2011-09-30    92771  2011/12
4  2011-11-30    55348  2011/12
5  2012-01-31    10745  2011/12
6  2012-03-31    91046  2011/12
7  2012-05-31    32632  2012/13
8  2012-07-31    77657  2012/13
9  2012-09-30    95364  2012/13
10 2012-11-30    78078  2012/13
11 2013-01-31    44535  2012/13
12 2013-03-31    89158  2012/13
13 2013-05-31    94263  2013/14
14 2013-07-31    99759  2013/14
15 2013-09-30    59057  2013/14
16 2013-11-30    38363  2013/14
17 2014-01-31    98069  2013/14
18 2014-03-31    44797  2013/14
19 2014-05-31    87895  2014/15

关于python - 如何将Pandas PeriodIndex转换为特定的财政年度字符串格式?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53517827/

10-15 08:50