Python 3.x 通过切片计算复合年增长率(缺失值)

Python 3.x 通过切片计算复合年增长率(缺失值),python-3.x,pandas,Python 3.x,Pandas,作为后续行动, 我想从熊猫数据框计算复合年增长率,如图所示,其中缺少一些数据值: df = pd.DataFrame({'A' : ['1','2','3','7'], 'B' : [7,6,np.nan,4], 'C' : [5,6,7,1], 'D' : [np.nan,9,9,8]}) df=df.set_index('A') df B C

作为后续行动, 我想从熊猫数据框计算复合年增长率,如图所示,其中缺少一些数据值:

df = pd.DataFrame({'A' : ['1','2','3','7'],
                       'B' : [7,6,np.nan,4],
                       'C' : [5,6,7,1],
                       'D' : [np.nan,9,9,8]})
df=df.set_index('A')
df
    B   C   D
A           
1   7   5   NaN
2   6   6   9
3   NaN 7   9
7   4   1   8

提前谢谢

在计算某个级别的回报时,可以使用最新的可用数据。例如,在计算第1行的复合年增长率时,我们希望使用(5/7)^(1/3)-1。此外,对于第3行(9/7)^(1/3)。有一个假设是,我们在所观察的所有年份中都按年度计算

根据这些假设:

df = df.bfill(axis=1).ffill(axis=1)
然后应用链接问题的解决方案

df['CAGR'] = df.T.pct_change().add(1).prod().pow(1./(len(df.columns) - 1)).sub(1)
没有这个假设。唯一其他合理的选择是按非NaN观测值的数量进行年度化。因此,我需要通过以下方式跟踪:

notnull = df.notnull().sum(axis=1)
df = df.bfill(axis=1).ffill(axis=1)
df['CAGR'] = df.T.pct_change().add(1).prod().pow(1./(notnull.sub(1))).sub(1)

事实上,这将成为更通用的解决方案,因为它也适用于没有空值的情况。

哇,谢谢!我刚刚开始分析财务数据,你的帮助使它变得更加有趣。很高兴我能帮忙。