从时间 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
答案 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编辑:
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