使用pandas DataFrame计算开发因子

时间:2017-02-16 07:42:43

标签: python pandas

从时间 t 到时间 t + 1 的发展因素是A t + 1 / A t 。我正在尝试将此计算应用于看起来如下所示的pandas DataFrame:

   T0   T1   T2
0  100  200  250
1  80   120  150

another post开始,我尝试了以下

f = lambda x: np.divide(x[1], x[0])
df.applymap(f, axis=1)

但是我收到错误索引错误。我想输出

   T0_T1  T1_T2
0  2.0    1.25
1  1.5    1.25

1 个答案:

答案 0 :(得分:1)

IIUC您需要将applymap更改为apply

f = lambda x: np.divide(x[1], x[0])
df1 = df.apply(f, axis=1)
print (df1)
0    2.0
1    1.5
dtype: float64

如果功能更复杂:

def f(x):
    print (x)
    #add code
    return x.T1 / x.T0

df1 = df.apply(f, axis=1)
print (df1)
0    2.0
1    1.5
dtype: float64

但是更好的是使用div的矢量化更快的解决方案:

print (df.T1.div(df.T0))
0    2.0
1    1.5
dtype: float64
print (df.T1 / df.T0)
0    2.0
1    1.5
dtype: float64

通过commnet编辑:

除以shift ed df,最后按iloc删除第一列:

df1 = df.div(df.shift(axis=1))
print (df1)
   T0   T1    T2
0 NaN  2.0  1.25
1 NaN  1.5  1.25

df1 = df1.iloc[:,1:]
print(df1)
    T1    T2
0  2.0  1.25
1  1.5  1.25