Python 3.x 使用熊猫的同比增长-向后移动N行

Python 3.x 使用熊猫的同比增长-向后移动N行,python-3.x,pandas,Python 3.x,Pandas,我有很多参数,我必须根据这些参数来计算同比增长 Type 2006-Q1 2006-Q2 2006-Q3 2006-Q4 2007-Q1 2007-Q2 2007-Q3 2007-Q4 2008-Q1 2008-Q2 2008-Q3 2008-Q4 MonMkt_IntRt 3.44 3.60 3.99 4.40 4.61 4.73 5.11 4.97 4.92 4.89 5.

我有很多参数,我必须根据这些参数来计算同比增长

Type                    2006-Q1 2006-Q2 2006-Q3 2006-Q4 2007-Q1 2007-Q2 2007-Q3 2007-Q4 2008-Q1 2008-Q2 2008-Q3 2008-Q4
MonMkt_IntRt            3.44    3.60    3.99    4.40    4.61    4.73    5.11    4.97    4.92    4.89    5.29    4.51
RtlVol                  97.08   97.94   98.25   99.15   99.63   100.29  100.71  101.18  102.04  101.56  101.05  99.49
IntRt                   4.44    5.60    6.99    7.40    8.61    9.73    9.11    9.97    9.92    9.89    7.29    9.51
GMR                     9.08    9.94    9.25    9.15    9.63    10.29   10.71   10.18   10.04   10.56   10.05   9.49
我需要计算增长,即在2007-Q1列中,我需要找到2006-Q1的增长。公式为(2007-Q1/2006-Q1)-1

我已经通过下面的链接,并试图编码

输出如下所示

Type                    2006-Q1 2006-Q2 2006-Q3 2006-Q4 2007-Q1 2007-Q2 2007-Q3 2007-Q4 2008-Q1 2008-Q2 2008-Q3 2008-Q4
MonMkt_IntRt                                            0.3398  0.3159  0.2806  0.1285  0.0661  0.0340  0.0363  -0.0912
RtlVol                                                  0.0261  0.0240  0.0249  0.0204  0.0242  0.0126  0.0033  -0.0166
IntRt                                                   0.6666  0.5375  0.3919  0.2310  0.1579  0.0195  0.0856  -0.2688
GMR                                                     0.0077  -0.031  0.1124  0.1704  0.0571  -0.024  -0.014  -0.0127

使用iloc移动数据片。请参见测试df的示例

df= pd.DataFrame({i:[0+i,1+i,2+i] for i in range(0,12)})
print(df)
    0   1   2   3   4   5   6   7   8   9  10  11
0   0   1   2   3   4   5   6   7   8   9  10  11
1   1   2   3   4   5   6   7   8   9  10  11  12
2   2   3   4   5   6   7   8   9  10  11  12  13


df.iloc[:,list(range(3,12))] = df.iloc[:,list(range(3,12))].values/ df.iloc[:,list(range(0,9))].values - 1
print(df)
    0   1   2  3    4    5     6     7     8         9         10   
0   0   1   2  inf  3.0  1.50  1.00  0.75  0.600000  0.500000  0.428571   
1   1   2   3  3.0  1.5  1.00  0.75  0.60  0.500000  0.428571  0.375000   
2   2   3   4  1.5  1.0  0.75  0.60  0.50  0.428571  0.375000  0.333333   

   11  
0  0.375000  
1  0.333333  
2  0.300000  


我找不到您的代码有任何问题。
在尝试进行列比较时,只需将axis=1添加到dataframe.shift()方法中 我已经执行了下面的代码,它给出了您期望的结果


您好,我收到以下错误“TypeError:不支持的操作数类型/:'unicode'和'unicode'”打印数据帧。看起来其中一列是非数字字符串。“类型”或季度名称可能是数据的一部分。除法运算符无法处理字符串。我已经使用“getSampleDataframe()”返回的数据帧进行了测试,它运行良好。只需打印您正在使用的数据框,您就会清楚为什么会出现此错误。是的,谢谢。我得到了这些列,并将它们转换为float,然后应用了这些函数。您好,我得到了以下错误“TypeError:unsupported operation type for/:'unicode'和'unicode'”
df= pd.DataFrame({i:[0+i,1+i,2+i] for i in range(0,12)})
print(df)
    0   1   2   3   4   5   6   7   8   9  10  11
0   0   1   2   3   4   5   6   7   8   9  10  11
1   1   2   3   4   5   6   7   8   9  10  11  12
2   2   3   4   5   6   7   8   9  10  11  12  13


df.iloc[:,list(range(3,12))] = df.iloc[:,list(range(3,12))].values/ df.iloc[:,list(range(0,9))].values - 1
print(df)
    0   1   2  3    4    5     6     7     8         9         10   
0   0   1   2  inf  3.0  1.50  1.00  0.75  0.600000  0.500000  0.428571   
1   1   2   3  3.0  1.5  1.00  0.75  0.60  0.500000  0.428571  0.375000   
2   2   3   4  1.5  1.0  0.75  0.60  0.50  0.428571  0.375000  0.333333   

   11  
0  0.375000  
1  0.333333  
2  0.300000  

def getSampleDataframe():
    df_economy_model = pd.DataFrame(
        {
        'Type':['MonMkt_IntRt', 'RtlVol', 'IntRt', 'GMR'],
        '2006-Q1':[3.44, 97.08, 4.44, 9.08],
        '2006-Q2':[3.6, 97.94, 5.6, 9.94],
        '2006-Q3':[3.99, 98.25, 6.99, 9.25],
        '2006-Q4':[4.4, 99.15, 7.4, 9.15],
        '2007-Q1':[4.61, 99.63, 8.61, 9.63],
        '2007-Q2':[4.73, 100.29, 9.73, 10.29],
        '2007-Q3':[5.11, 100.71, 9.11, 10.71],
        '2007-Q4':[4.97, 101.18, 9.97, 10.18],
        '2008-Q1':[4.92, 102.04, 9.92, 10.04],
        '2008-Q2':[4.89, 101.56, 9.89, 10.56],
        '2008-Q3':[5.29, 101.05, 7.29, 10.05],
        '2008-Q4':[4.51, 99.49, 9.51, 9.49]
        })  # Your data
    return df_economy_model> 

df_cd_americas = getSampleDataframe()
df_cd_americas.set_index('Type', inplace=True)
df_yearly_growth = (df/df.shift(4, axis=1))-1
print (df_cd_americas)
print (df_yearly_growth)